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

集成RabbitMQ+MQ常用操作 - 实践

文章目录

1.环境搭建

1.Docker安装RabbitMQ
1.拉取镜像
docker pull rabbitmq:3.8-management
2.安装命令
docker run -e RABBITMQ_DEFAULT_USER=sun-e RABBITMQ_DEFAULT_PASS=mq-v mq-plugins:/plugins--name mq--hostname mq-p 15672:15672-p 5672:5672-d 699038cb2b96 # 注意这里是镜像id,需要替换
3.开启5672和15672端口
4.登录控制台

15672端口

2.整合Spring AMQP
1.sun-common模块下创建新模块

CleanShot 2024-08-02 at 13.55.01@2x

2.引入amqp依赖和fastjson

4.0.0com.sunxianshengsun-common1.0-SNAPSHOTsun-common-rabbitmq${children.version}org.springframework.bootspring-boot-starter-amqpcom.alibabafastjson
3.新建一个mq-demo的模块
1.在sun-frame下创建mq-demo

CleanShot 2024-08-02 at 14.10.42@2x

2.然后在mq-demo下创建生产者和消费者子模块

CleanShot 2024-08-02 at 14.16.31@2x

CleanShot 2024-08-02 at 14.16.48@2x

3.查看是否交给父模块管理了

CleanShot 2024-08-02 at 14.18.56@2x

4.在mq-demo模块引入sun-common-rabbitmq依赖
    com.sunxianshengsun-common-rabbitmq1.0-SNAPSHOT
5.publisher引入sun-common-test依赖
    com.sunxianshengsun-common-test1.0-SNAPSHOT
6.将sun-common-rabbitmq clean-install一下
7.给consumer和publisher都创建主类
1.ConsumerApplication.java
package com.sunxiansheng.consumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan("com.sunxiansheng")
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}
}
2.PublisherApplication.java
package com.sunxiansheng.publisher;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class PublisherApplication {public static void main(String[] args) {SpringApplication.run(PublisherApplication.class);}
}
4.测试MQ
1.application.yml mq的最基本配置
spring:# RabbitMQ 配置rabbitmq:# 服务器地址host: ip# 用户名username: sunxiansheng# 密码password: rabbitmq# 虚拟主机virtual-host: /# 端口port: 5672
2.consumer
1.TestConfig.java MQ配置
package com.sunxiansheng.consumer.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/*** Description: 最基本的MQ测试* @Author sun* @Create 2024/8/2 14:34* @Version 1.0*/
@Configuration
public class TestConfig {/*** 创建一个fanout类型的交换机* @return*/@Beanpublic FanoutExchange fanoutExchange() {return new FanoutExchange("fanout.exchange.test");}/*** 创建一个队列* @return*/@Beanpublic Queue fanoutQueueTest() {return new Queue("fanout.queue.test");}/*** 交换机和队列绑定*/@Beanpublic Binding binding() {return BindingBuilder.bind(fanoutQueueTest()).to(fanoutExchange());}
}
2.TestConfigListener.java 监听队列
package com.sunxiansheng.consumer.listener;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/*** Description: 最基本的MQ测试* @Author sun* @Create 2024/8/2 14:34* @Version 1.0*/
@Component
public class TestConfigListener {@RabbitListener(queues = "fanout.queue.test")public void receive(String message) {System.out.println("接收到的消息:" + message);}
}
3.publisher
1.TestConfig.java 测试(注意指定启动类)
package com.sunxiansheng.consumer.config;
import com.sunxiansheng.publisher.PublisherApplication;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
/*** Description: 最基本的MQ测试* @Author sun* @Create 2024/8/2 14:34* @Version 1.0*/
@SpringBootTest(classes = PublisherApplication.class) // 指定启动类
public class TestConfig {@Resourceprivate AmqpTemplate amqpTemplate;@Testpublic void send() {// 交换机String exchange = "fanout.exchange.test";// 路由键String routingKey = "";// 消息String message = "hello fanout";// 发送消息amqpTemplate.convertAndSend(exchange, routingKey, message);}
}
2.结果

CleanShot 2024-08-02 at 14.46.49@2x

2.基本交换机

1.Fanout
1.FanoutConfig.java 交换机配置
package com.sunxiansheng.consumer.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/*** Description: Fanout交换机* @Author sun* @Create 2024/7/29 15:06* @Version 1.0*/
@Configuration
public class FanoutConfig {@Beanpublic FanoutExchange fanoutExchange1() {// 创建一个fanout类型的交换机return new FanoutExchange("fanout.exchange");}@Beanpublic Queue fanoutQueue1() {// 创建一个队列return new Queue("fanout.queue1");}@Beanpublic Queue fanoutQueue2() {// 创建一个队列return new Queue("fanout.queue2");}// 两个队列绑定到交换机上@Beanpublic Binding bindingFanoutQueue1(Queue fanoutQueue1, FanoutExchange fanoutExchange1) {return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange1);}@Beanpublic Binding bindingFanoutQueue2(Queue fanoutQueue2, FanoutExchange fanoutExchange1) {return BindingBuilder.bind(fanoutQueue2).to(fanoutExchange1);}
}
2.FanoutConfigListener.java 监听者
package com.sunxiansheng.consumer.listener;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/*** Description: Fanout交换机* @Author sun* @Create 2024/7/29 15:06* @Version 1.0*/
@Component
public class FanoutConfigListener {@RabbitListener(queues = "fanout.queue1")public void receive1(String message) {System.out.println("fanout.queue1接收到的消息:" + message);}@RabbitListener(queues = "fanout.queue2")public void receive2(String message) {System.out.println("fanout.queue2接收到的消息:" + message);}
}
3.FanoutConfig.java 生产者
package com.sunxiansheng.consumer.config;
import com.sunxiansheng.publisher.PublisherApplication;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
/*** Description: Fanout交换机* @Author sun* @Create 2024/7/29 15:06* @Version 1.0*/
@SpringBootTest(classes = PublisherApplication.class) // 指定启动类
public class FanoutConfig {@Resourceprivate AmqpTemplate amqpTemplate;@Testpublic void send() {// 交换机String exchange = "fanout.exchange";// 路由键String routingKey = "";// 消息String message = "hello fanout";// 发送消息amqpTemplate.convertAndSend(exchange, routingKey, message);}
}
2.Direct
1.DirectConfig.java 交换机配置
package com.sunxiansheng.consumer.config;
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;
/*** Description: Direct交换机* @Author sun* @Create 2024/7/29 15:06* @Version 1.0*/
@Configuration
public class DirectConfig {@Beanpublic DirectExchange directExchange() {// 创建一个direct类型的交换机return new DirectExchange("direct.exchange");}@Beanpublic Queue directQueue1() {// 创建一个队列return new Queue("direct.queue1");}@Beanpublic Queue directQueue2() {// 创建一个队列return new Queue("direct.queue2");}// 两个队列绑定到交换机上,这里需要指定routingKey@Beanpublic Binding bindingDirectQueue1(Queue directQueue1, DirectExchange directExchange) {return BindingBuilder.bind(directQueue1).to(directExchange).with("black");}@Beanpublic Binding bindingDirectQueue2(Queue directQueue2, DirectExchange directExchange) {return BindingBuilder.bind(directQueue2).to(directExchange).with("green");}
}
2.DirectConfigListener.java 监听者
package com.sunxiansheng.consumer.listener;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/*** Description: Direct交换机* @Author sun* @Create 2024/7/29 15:06* @Version 1.0*/
@Component
public class DirectConfigListener {@RabbitListener(queues = "direct.queue1")public void receive1(String message) {System.out.println("direct.queue1接收到的消息:" + message);}@RabbitListener(queues = "direct.queue2")public void receive2(String message) {System.out.println("direct.queue2接收到的消息:" + message);}
}
3.DirectConfig.java 生产者
package com.sunxiansheng.consumer.config;
import com.sunxiansheng.publisher.PublisherApplication;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
/*** Description: Direct交换机* @Author sun* @Create 2024/7/29 15:06* @Version 1.0*/
@SpringBootTest(classes = PublisherApplication.class) // 指定启动类
public class DirectConfig {@Resourceprivate AmqpTemplate amqpTemplate;@Testpublic void send() {// 交换机String exchange = "direct.exchange";// 路由键String routingKey = "black";// 消息String message = "hello direct";// 发送消息amqpTemplate.convertAndSend(exchange, routingKey, message);}
}
http://www.jsqmd.com/news/134267/

相关文章:

  • 语音唤醒准确率提升80%?Open-AutoGLM+ASR融合方案全解析
  • 揭秘智谱AutoGLM浏览器集成:如何3分钟完成Open-AutoGLM部署与调用
  • 楼宇实训设备物联网运维管理方案
  • java基于互联网+的个人健康管理系统设计
  • 国产高温陶瓷纤维马弗炉这么多,哪家售后做得好?2025年度源头厂家推荐 - 品牌推荐大师
  • 2025诚信AI拓客品牌企业TOP5权威推荐:信誉好的AI拓客公司深度测评 - 工业品牌热点
  • 网安如何防御DDoS攻击?
  • 智谱清言AutoGLM黑科技揭秘:如何实现低代码大模型训练?
  • 从覆盖率数字到智能风险洞察:大模型如何重塑测试覆盖分析
  • 基于微信小程序的快递代领系统的设计与实现开题报告
  • 2025年高温合金GH4169优质生产商排名与解析 - mypinpai
  • 【AutoGLM高效开发秘诀】:为什么顶尖工程师都在用浏览器调用Open-AutoGLM?
  • 2025年评价高的超临界CO₂萃取/超临界CO₂萃取设备厂家最新TOP排行榜 - 品牌宣传支持者
  • Hybrid Model Support:阿里云 Tair 联合 SGLang对 Mamba-Transformer 等混合架构模型的支持方案
  • 基于Android的随心行汽车租赁系统
  • 【圣诞快乐 Merry Christmas】酷圣诞粒子特效网页
  • Ubuntu22.04 外接显示屏显示异常
  • 组态图 + ThingsBoard 拖拽式搭建可视化数据大屏
  • 2025年高温合金GH4169服务商家排名:看哪家实力不错? - myqiye
  • 读书笔记:C++ Software Design(1)
  • Open-AutoGLM浏览器启动失败全记录,20年专家教你一次性解决
  • 基于微信小程序的快递代领系统的设计与实现任务书
  • 智谱AutoGLM浏览器调用失败?99%的人都忽略了这1个关键参数
  • 用AIGC生成测试周报:从Jira、Git、CI日志中自动提炼关键指标
  • ssm基于Vue.js的在线购物系统的设计与实现
  • 科研工具分享:Zotero还有他的插件
  • 2025年评价高的五金精密铸造品牌厂家排行榜 - 品牌宣传支持者
  • 基于net高校一卡通管理系统的设计与实现
  • 2025年上海靠谱隔膜泵工厂排行榜,国产隔膜泵精品定制推荐 - 工业品牌热点
  • 基于微信小程序的快递代领系统的设计与实现外文