Java RabbitMQ配置和使用,基于SpringBoot
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | package rabbitmq.demo; import com.rabbitmq.client.AMQP; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.amqp.core.AmqpAdmin; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.DirectExchange; import org.springframework.amqp.core.Queue; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; import java.util.UUID; @RunWith (SpringRunner. class ) @SpringBootTest public class DemoApplicationTests { @Autowired RabbitTemplate rabbitTemplate; //使用RabbitTemplate,这提供了接收/发送等等方法 @Autowired AmqpAdmin amqpAdmin; /** * 创建交换器 Exchange */ @Test public void createExchange() { // 创建Exchange 交换器 amqpAdmin.declareExchange( new DirectExchange( "amqpadmin.exchange" )); System.out.println( "创建Exchange完成" ); // 创建Queue 队列,持久化 amqpAdmin.declareQueue( new Queue( "amqpproduct" , true )); System.out.println( "创建Queue完成" ); // 创建绑定规则 amqpAdmin.declareBinding( new Binding( "amqpproduct" , Binding.DestinationType.QUEUE, "amqpadmin.exchange" , "amqpproduct" , null )); System.out.println( "创建绑定规则完成" ); } /** * 发送消息给RabbitMQ消息队列 发送单播 点对点的消息 direct方式 */ @Test public void rabbitMqSendTest() { String messageId = String.valueOf(UUID.randomUUID()); String messageData = "test message, hello!" ; String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm:ss" )); Map<String, Object> map = new HashMap<>(); map.put( "messageId" , messageId); map.put( "messageData" , messageData); map.put( "createTime" , createTime); //方式一 以默认序列化的方式发送,如用json的方式,写RabbitConfig文件 rabbitTemplate.convertAndSend( "myexchange.direct" , "myproduct" , map); } /** * 发送消息给RabbitMQ消息队列 广播方式 fanout方式 */ @Test public void rabbitMqSendTest2() { String messageId = String.valueOf(UUID.randomUUID()); String messageData = "test message, hello!" ; String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm:ss" )); Map<String, Object> map = new HashMap<>(); map.put( "messageId" , messageId); map.put( "messageData" , messageData); map.put( "createTime" , createTime); //fanout广播方式 不用填路由键 无效 rabbitTemplate.convertAndSend( "myexchange.fanout" , "" , map); } /** * 从RabbitMQ接收消息 */ @Test public void rabbitMqGetTest() { //收取消息成功后,会从相对应的消息队列里删除该消息 Object o = rabbitTemplate.receiveAndConvert( "myproduct" ); System.out.println( "接收的消息队列数据类型:" + o.getClass()); System.out.println( "接收的消息队列数据:" + o.toString()); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package rabbitmq.demo.config; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitConfig { /** * 用json方式替换默认的序列化 * @return */ @Bean public MessageConverter messageConverter() { return new Jackson2JsonMessageConverter(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package rabbitmq.demo.service; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Service; @Service public class RabbitListenerService { /** * 添加监听器,自动获取消息队列信息 * @param o */ @RabbitListener (queues = { "myproduct" , "myproduct" , "myarticle.new" }) //可监听多个queue public void rabbitMqListenerReceive(Object o){ // 需要在启动入口添加 @EnableRabbit 开启基于注解的rabbitMQ模式 System.out.println( "接收的消息队列数据类型:" + o.getClass()); System.out.println( "接收的消息队列数据:" + o.toString()); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #application.yml server: port: 8080 spring: #给项目来个名字 application: name: rabbitmq-provider #配置rabbitMq 服务器 rabbitmq: host: 139.199 . 162.126 port: 5672 username: xxxx password: xxxx #虚拟host 可以不设置,使用server默认host #virtual-host: JCcccHost |
1 2 3 4 5 | <!--rabbitmq--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> |
分类:
JAVA
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架