当前位置: 首页 > news >正文

【RabbitMQ】RabbitMQ整合SpringBoot案例

文章目录

    • 1、前情提要【RabbitMQ】
    • 2、RabbitMQ-SpringBoot案例 -fanout模式
      • 2.1 实现架构总览
      • 2.2 具体实现
        • 2.2.1生产者
        • 2.2.1消费者

1、前情提要【RabbitMQ】

【RabbitMQ】消息队列-RabbitMQ篇章

RabbitMQ实现流程
在这里插入图片描述

2、RabbitMQ-SpringBoot案例 -fanout模式

2.1 实现架构总览

在这里插入图片描述

实现步骤:
1:创建生产者工程:sspringboot-rabbitmq-fanout-producer
2:创建消费者工程:springboot-rabbitmq-fanout-consumer
3:引入spring-boot-rabbitmq的依赖
4:进行消息的分发和测试
5:查看和观察web控制台的状况

2.2 具体实现

2.2.1生产者

在这之前提前开好服务器,并且启动mq的服务,可参考上面的链接

  • 1、创建生产者springboot工程:sspringboot-rabbitmq-fanout-producer
    在这里插入图片描述
  • 2、导入启动(web、mq)依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 3、在application.yml进行配置
# 服务端口
server:port: 8080
# 配置rabbitmq服务
spring:rabbitmq:username: adminpassword: adminvirtual-host: /# ip地址为开启mq服务的服务器地址host: 47.104.141.27port: 5672
  • 4:定义订单的生产者
package com.xuexiangban.rabbitmq.springbootrabbitmqfanoutproducer.service;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.UUID;
/*** @author: 学相伴-飞哥* @description: OrderService* @Date : 2021/3/4*/
@Component
public class OrderService {@Autowiredprivate RabbitTemplate rabbitTemplate;// 1: 定义交换机private String exchangeName = "fanout_order_exchange";// 2: 路由keyprivate String routeKey = "";public void makeOrder(Long userId, Long productId, int num) {// 1: 模拟用户下单String orderNumer = UUID.randomUUID().toString();// 2: 根据商品id productId 去查询商品的库存// int numstore = productSerivce.getProductNum(productId);// 3:判断库存是否充足// if(num >  numstore ){ return  "商品库存不足..."; }// 4: 下单逻辑// orderService.saveOrder(order);// 5: 下单成功要扣减库存// 6: 下单完成以后System.out.println("用户 " + userId + ",订单编号是:" + orderNumer);// 发送订单信息给RabbitMQ fanoutrabbitTemplate.convertAndSend(exchangeName, routeKey, orderNumer);}
}
  • 4、配置类绑定交换机和队列的关系
package com.xuexiangban.rabbitmq.springbootrabbitmqfanoutproducer.service;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/*** @Author : JCccc* @CreateTime : 2019/9/3* @Description :**/
@Configuration
public class DirectRabbitConfig {//队列 起名:TestDirectQueue@Beanpublic Queue emailQueue() {// durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效// exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable// autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。//   return new Queue("TestDirectQueue",true,true,false);//一般设置一下队列的持久化就好,其余两个就是默认falsereturn new Queue("email.fanout.queue", true);}@Beanpublic Queue smsQueue() {// durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效// exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable// autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。//   return new Queue("TestDirectQueue",true,true,false);//一般设置一下队列的持久化就好,其余两个就是默认falsereturn new Queue("sms.fanout.queue", true);}@Beanpublic Queue weixinQueue() {// durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效// exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable// autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。//   return new Queue("TestDirectQueue",true,true,false);//一般设置一下队列的持久化就好,其余两个就是默认falsereturn new Queue("weixin.fanout.queue", true);}//Direct交换机 起名:TestDirectExchange@Beanpublic DirectExchange fanoutOrderExchange() {//  return new DirectExchange("TestDirectExchange",true,true);return new DirectExchange("fanout_order_exchange", true, false);}//绑定  将队列和交换机绑定, 并设置用于匹配键:TestDirectRouting@Beanpublic Binding bindingDirect1() {return BindingBuilder.bind(weixinQueue()).to(fanoutOrderExchange()).with("");}@Beanpublic Binding bindingDirect2() {return BindingBuilder.bind(smsQueue()).to(fanoutOrderExchange()).with("");}@Beanpublic Binding bindingDirect3() {return BindingBuilder.bind(emailQueue()).to(fanoutOrderExchange()).with("");}
}
  • 6.测试

向队列发送10条消息

package com.xuexiangban.rabbitmq.springbootrabbitmqfanoutproducer;
import com.xuexiangban.rabbitmq.springbootrabbitmqfanoutproducer.service.OrderService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootRabbitmqFanoutProducerApplicationTests {@AutowiredOrderService orderService;@Testpublic void contextLoads() throws Exception {for (int i = 0; i < 10; i++) {Thread.sleep(1000);Long userId = 100L + i;Long productId = 10001L + i;int num = 10;orderService.makeOrder(userId, productId, num);}}
}

启动测试,此时进入mq的web页面,查看交换机和队列是否绑定上了,查看是否有队列消息

在这里插入图片描述

向所有队列中都加入10条消息—说明交换机和队列绑定没问题
在这里插入图片描述
在这里插入图片描述

2.2.1消费者

参照生产者的创建方法,选择在平级目录下创建:
springboot-order-rabbitmq-consumber

在这里插入图片描述
2. 修改配置文件

# 服务器
server:
# 端口要改成不冲突的port: 8081/
# rabbitmq配置
spring:rabbitmq:username: adminpassword: adminvirtual-host: /host: 192.168.157.128    #127.0.0.1port: 5672
  1. 创建FanoutEmailConsumer、FanoutNoteConsumer、FanoutSMSConsumer消费者接收

在这里插入图片描述
在这里插入图片描述

4.运行测试
在这里插入图片描述

http://www.lryc.cn/news/134228.html

相关文章:

  • 如何在window下cmd窗口执行linux指令?
  • c++基础系列:字符串、向量和数组
  • docker 05(dockerfile)
  • PostMan 测试项目是否支持跨域
  • jsp 协同过滤 图书管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • 商城-学习整理-高级-商城业务-商品上架es(十)
  • 【水文学法总结】河道内生态流量计算方法(含MATLAB实现代码)
  • 特斯拉Model 3的七年狂飙
  • 物流签收异常,财务对账复杂,怎么解决?
  • docker之镜像与数据卷
  • 服务器为什么会被攻击?43.248.186.x
  • 文心一言 VS 讯飞星火 VS chatgpt (79)-- 算法导论7.4 4题
  • 整理mongodb文档:索引
  • EPICS libCom库(4) -- epicsTimer
  • 成都大运会,保障大型活动无线电安全需要…
  • 【Spring Boot】构建RESTful服务 — 实战:实现Web API版本控制
  • 6.Web后端开发【SpringBoot入门】
  • [ubuntu]ubuntu18.04使用自带共享桌面实现vncserver连接
  • docker启用cgroup v2
  • Java课题笔记~ Axios
  • ip地址和地理位置有关系吗
  • mac指定node版本 mac node版本降级 mac切换node版本
  • C# Windows登录界面进行截图,控制鼠标键盘等操作实现(一)
  • 因果推断(五)基于谷歌框架Causal Impact的因果推断
  • VR全景加盟项目如何开展?如何共赢VR时代红利?
  • Win10+anaconda+CUDA+pytorch+vscode配置
  • vue-router在vue2/3区别
  • Apache Doris 入门教程33:统计信息
  • 有效需求的特征
  • 基于51单片机无线温度报警控制器 NRF24L01 多路温度报警系统设计