基于SpringBoot+RabbitMQ完成应⽤通信

前言:

经过上面俩章学习,我们已经知道Rabbit的使用方式
RabbitMQ 七种工作模式介绍_rabbitmq 工作模式-CSDN博客

RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)-CSDN博客
作为⼀个消息队列,RabbitMQ也可以⽤作应⽤程序之间的通信.上述代码⽣产者和消费者代码放在不同的应⽤中即可完成不同应⽤程序的通信.

目录

前言:

一.创建项目

二.订单系统(⽣产者)

三.物流系统(消费者)

四.发送消息格式为对象



接下来我们来看,基于SpringBoot+RabbitMQ完成应⽤间的通信.
需求描述:
⽤⼾下单成功之后,通知物流系统,进⾏发货.(只讲应⽤通信,不做具体功能实现)

一.创建项目

为⽅便演示,把两个项⽬放在⼀个项⽬中

1)1. 创建⼀个空的项⽬rabbitmq-communication(其实就是⼀个空的⽂件夹)

2) 在这个项⽬⾥,创建Module

3)后续流程和创建SpringBoot项⽬⼀样

4)若发现识别不到java类文件

只需右击改项目文件,点进对应选项,修改成Maven即可


二.订单系统(⽣产者)

1)配置相应文件

2) 声明队列

java 复制代码
package com.bite.order.config;

import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitmqConfig {
    @Bean("orderQueue")
    public Queue orderQueue() {
        return QueueBuilder.durable("order.create").build();
    }
}

3) 编写下单接⼝,下单成功之后,发送订单消息

java 复制代码
package com.bite.order.controller;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;

@RequestMapping("/order")
@RestController
public class OrderController {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @RequestMapping("/create")
    public String create() {
        //省略相关操作 例如校验参数 相关数据库操作 
        //主要测试代码是否最后成功发送即可
        String orderId = UUID.randomUUID().toString();
        rabbitTemplate.convertAndSend("","order.create","下单成功, 订单 ID:"+orderId);
        return "下单成功!";
    }
}

4) 启动订单系统(生产者,观察结果)


三.物流系统(消费者)

1)配置相应文件

8080端⼝已经被订单系统占⽤了,修改物流系统的端⼝号为9090

2)监听队列

java 复制代码
package com.bite.logistics.listener;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class OrderListener {
    @RabbitListener(queues = "order.create")
    public void handleMessage(String message) {
        System.out.println("接收订单信息:"+message);
    }
}

结果:

java 复制代码
接收到消息:下单成功, 订单ID:a4c1dbdc-688d-430a-ac16-bca713f85940
接收到消息:下单成功, 订单ID:5d190f19-7a8c-4866-b6e7-2b2bbe79412d

四.发送消息格式为对象

定义一个对象

java 复制代码
import lombok.Data;
@Data
public class OrderInfo {
    private String orderId;
    private String name;
}

生产者:

java 复制代码
    @RequestMapping("/create2")
    public String create2() {
        //省略相关操作 例如校验参数 相关数据库操作
        //主要测试代码是否最后成功发送即可
        OrderInfo orderInfo = new OrderInfo();
        orderInfo.setOrderId(UUID.randomUUID().toString());
        orderInfo.setName("商品:"+new Random().nextInt(100));
        rabbitTemplate.convertAndSend("","order.create",orderInfo);
        return "下单成功!";
    }

此时为乱码,因此需要序列化

SpringAMQP提供了 Jackson2JsonMessageConverter 和
MappingJackson2MessageConverter 等转换器,我们需要把⼀个 MessageConverter 设置到 RabbitTemplate 中.

在config包里面添加

java 复制代码
    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate template = new RabbitTemplate(connectionFactory);
        template.setMessageConverter(jackson2JsonMessageConverter()); // 设置消息转换器
        return template;
    }

    private Jackson2JsonMessageConverter jackson2JsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

消费者:

java 复制代码
    @RabbitListener(queues = "order.create")
    public void handleMessage2(OrderInfo orderInfo) {
        System.out.println("接收订单信息OrderInfo :"+orderInfo);
    }

结语: 写博客不仅仅是为了分享学习经历,同时这也有利于我巩固知识点,总结该知识点,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进。同时也希望读者们不吝啬你们的点赞+收藏+关注,你们的鼓励是我创作的最大动力!

相关推荐
Q_19284999062 小时前
基于Spring Boot的电影售票系统
java·spring boot·后端
陈无左耳、3 小时前
Spring Boot应用开发实战:从入门到精通
spring boot
烟波人长安吖~3 小时前
【目标跟踪+人流计数+人流热图(Web界面)】基于YOLOV11+Vue+SpringBoot+Flask+MySQL
vue.js·pytorch·spring boot·深度学习·yolo·目标跟踪
正在绘制中6 小时前
Java重要面试名词整理(八):RabbitMQ
java·面试·java-rabbitmq
张铁铁是个小胖子7 小时前
消息中间件RabbitMQ和kafka
分布式·kafka·rabbitmq
Mr.朱鹏8 小时前
操作002:HelloWorld
java·后端·spring·rabbitmq·maven·intellij-idea·java-rabbitmq
顽疲8 小时前
从零用java实现 小红书 springboot vue uniapp (6)用户登录鉴权及发布笔记
java·vue.js·spring boot·uni-app
编程洪同学9 小时前
Spring Boot 中实现自定义注解记录接口日志功能
android·java·spring boot·后端
GraduationDesign10 小时前
基于SpringBoot的蜗牛兼职网的设计与实现
java·spring boot·后端
customer0810 小时前
【开源免费】基于SpringBoot+Vue.JS安康旅游网站(JAVA毕业设计)
java·vue.js·spring boot·后端·kafka·开源·旅游