赞
踩
交换器:
build.gradle:
plugins { id 'java' id 'org.springframework.boot' version '3.1.1' id 'io.spring.dependency-management' version '1.1.0' } group = 'com.kexuexiong' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { // mavenCentral() maven { url 'https://maven.aliyun.com/repository/public' } } dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.2' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.mysql:mysql-connector-j' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.2' // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp implementation 'org.springframework.boot:spring-boot-starter-amqp' implementation 'cn.hutool:hutool-all:5.8.16' } tasks.named('test') { useJUnitPlatform() }
yml:
使用的RabbitMQ的集群部署,192.168.49.10:5672,192.168.49.9:5672,192.168.49.11:5672
server: port: 8014 spring: rabbitmq: username: admin password: 123456 dynamic: true # port: 5672 # host: 192.168.49.9 addresses: 192.168.49.10:5672,192.168.49.9:5672,192.168.49.11:5672 publisher-confirm-type: correlated publisher-returns: true application: name: shushan datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://ip/shushan username: root password: hikari: minimum-idle: 10 maximum-pool-size: 20 idle-timeout: 50000 max-lifetime: 540000 connection-test-query: select 1 connection-timeout: 600000
下面根据三种交换机的类型举例子:DirectExchange、TopicExchange、FanoutExchange。
项目所使用到的常量:
package com.kexuexiong.shushan.common.mq; public class MqConstant { public final static String demoDirectQueue = "demoDirectQueue"; public final static String demoDirectExchange = "demoDirectExchange"; public final static String demoDirectRouting = "demoDirectRouting"; public final static String lonelyDirectExchange = "lonelyDirectExchange"; public final static String topicExchange = "topicExchange"; public final static String BIG_CAR_TOPIC = "topic.big_car"; public final static String SMALL_CAR_TOPIC = "topic.small_car"; public final static String TOPIC_ALL = "topic.#"; public final static String FANOUT_A = "fanout.A"; public final static String FANOUT_B = "fanout_B"; public final static String FANOUT_C = "fanout_c"; public final static String FANOUT_EXCHANGE = "fanoutExchange"; public final static String DEAD_LETTER_EXCHANGE = "dead.letter.exchange"; public final static String DEAD_LETTER_QUEUE = "dead.letter.queue"; public final static String DEAD_LETTER_ROUTING_KEY = "dead.letter.routing.key"; public final static String BUSINESS_QUEUE = "business.queue"; public final static String BUSINESS_ROUTING_KEY = "business.routing.key"; public final static String BUSINESS_EXCHANGE = "business.exchange"; }
config:
package com.kexuexiong.shushan.common.mq; 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; @Configuration public class DirectRabbitConfig { @Bean public Queue demoDirectQueue() { return new Queue(MqConstant.demoDirectQueue, true, false, false); } @Bean DirectExchange demoDirectExchange() { return new DirectExchange(MqConstant.demoDirectExchange, true, false); } @Bean Binding bingingDirect() { return BindingBuilder.bind(demoDirectQueue()).to(demoDirectExchange()).with(MqConstant.demoDirectRouting); } @Bean DirectExchange lonelyDirectExchange() { return new DirectExchange(MqConstant.lonelyDirectExchange); } }
DirectReceiver 消费者:
package com.kexuexiong.shushan.common.mq; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import java.util.Map; @Component @Slf4j @RabbitListener(queues = MqConstant.demoDirectQueue) public class DirectReceiver { @RabbitHandler public void process(Map msg){ log.info("1---receiver msg:"+msg.toString()); } }
DirectReceiverV2 消费者:
package com.kexuexiong.shushan.common.mq; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import java.util.Map; @Component @Slf4j @RabbitListener(queues = MqConstant.demoDirectQueue) public class DirectReceiverV2 { @RabbitHandler public void process(Map msg){ log.info("2---receiver msg:"+msg.toString()); } }
MqController 生产者:
package com.kexuexiong.shushan.controller.mq; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.RandomUtil; import com.kexuexiong.shushan.common.mq.MqConstant; import com.kexuexiong.shushan.controller.BaseController; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.MessagePostProcessor; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.UUID; @Slf4j @RestController @RequestMapping("/mq/") public class MqController extends BaseController { @Autowired RabbitTemplate rabbitTemplate; @GetMapping("/sendDirectMessage") public String sendDirectMessage(){ String msgId = UUID.randomUUID().toString(); String msg = "demo msg ,kexuexiong"; String createTime = DateUtil.format(new Date(),"YYYY-MM-dd HH:mm:ss"); Map<String,Object> map = new HashMap(); map.put("msgId",msgId); map.put("msg",msg); map.put("createTime",createTime); rabbitTemplate.convertAndSend("demoDirectExchange","demoDirectRouting",map); return "ok"; }
测试:
结果:
2023-10-10T16:33:09.411+08:00 INFO 27232 --- [nio-8014-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2023-10-10T16:33:09.412+08:00 INFO 27232 --- [nio-8014-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2023-10-10T16:33:09.413+08:00 INFO 27232 --- [nio-8014-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms 2023-10-10T16:33:09.471+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback data: null 2023-10-10T16:33:09.471+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback ack :true 2023-10-10T16:33:09.472+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback cause :null 2023-10-10T16:33:09.481+08:00 INFO 27232 --- [ntContainer#0-1] c.k.shushan.common.mq.DirectReceiver : 1---receiver msg��{msg=demo msg ,kexuexiong, createTime=2023-10-10 16:33:09, msgId=e2dfe4c7-22b5-42b7-8f7a-967148472eaa} 2023-10-10T16:33:28.327+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback data: null 2023-10-10T16:33:28.327+08:00 INFO 27232 --- [ntContainer#1-1] c.k.shushan.common.mq.DirectReceiverV2 : 2---receiver msg��{msg=demo msg ,kexuexiong, createTime=2023-10-10 16:33:28, msgId=9c3318df-35a1-44c3-8ac3-395e7932c45d} 2023-10-10T16:33:28.327+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback ack :true 2023-10-10T16:33:28.327+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback cause :null 2023-10-10T16:33:29.047+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback data: null 2023-10-10T16:33:29.047+08:00 INFO 27232 --- [ntContainer#0-1] c.k.shushan.common.mq.DirectReceiver : 1---receiver msg��{msg=demo msg ,kexuexiong, createTime=2023-10-10 16:33:29, msgId=c5959bbd-dfb2-485f-86f1-19e0617d9e30} 2023-10-10T16:33:29.047+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback ack :true 2023-10-10T16:33:29.047+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback cause :null 2023-10-10T16:33:38.846+08:00 INFO 27232 --- [ntContainer#1-1] c.k.shushan.common.mq.DirectReceiverV2 : 2---receiver msg��{msg=demo msg ,kexuexiong, createTime=2023-10-10 16:33:38, msgId=7b38272e-133e-4aac-affc-4dc22a4d3ade} 2023-10-10T16:33:38.846+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback data: null 2023-10-10T16:33:38.846+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback ack :true 2023-10-10T16:33:38.846+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback cause :null 2023-10-10T16:33:39.588+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback data: null 2023-10-10T16:33:39.588+08:00 INFO 27232 --- [ntContainer#0-1] c.k.shushan.common.mq.DirectReceiver : 1---receiver msg��{msg=demo msg ,kexuexiong, createTime=2023-10-10 16:33:39, msgId=7ddaf70b-db56-440e-b32e-21c299cfd374} 2023-10-10T16:33:39.588+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback ack :true 2023-10-10T16:33:39.588+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback cause :null 2023-10-10T16:33:40.307+08:00 INFO 27232 --- [ntContainer#1-1] c.k.shushan.common.mq.DirectReceiverV2 : 2---receiver msg��{msg=demo msg ,kexuexiong, createTime=2023-10-10 16:33:40, msgId=2168972a-1f29-46a1-9c0f-1d90871d6aee} 2023-10-10T16:33:40.307+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback data: null 2023-10-10T16:33:40.307+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback ack :true 2023-10-10T16:33:40.307+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback cause :null 2023-10-10T16:33:40.962+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback data: null 2023-10-10T16:33:40.962+08:00 INFO 27232 --- [ntContainer#0-1] c.k.shushan.common.mq.DirectReceiver : 1---receiver msg��{msg=demo msg ,kexuexiong, createTime=2023-10-10 16:33:40, msgId=3c2c55b7-746a-4c3b-9d4d-da1f52a7e32a} 2023-10-10T16:33:40.962+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback ack :true 2023-10-10T16:33:40.962+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback cause :null 2023-10-10T16:33:41.710+08:00 INFO 27232 --- [ntContainer#1-1] c.k.shushan.common.mq.DirectReceiverV2 : 2---receiver msg��{msg=demo msg ,kexuexiong, createTime=2023-10-10 16:33:41, msgId=e276c091-6526-4c1f-ba18-76c6aa7577d7} 2023-10-10T16:33:41.711+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback data: null 2023-10-10T16:33:41.711+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback ack :true 2023-10-10T16:33:41.711+08:00 INFO 27232 --- [nectionFactory1] c.k.shushan.common.config.RabbitConfig : confirmCallback cause :null
TopicRabbitConfig :
package com.kexuexiong.shushan.common.mq; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.Queue; import org.springframework.amqp.core.TopicExchange; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class TopicRabbitConfig { @Bean public Queue bigCarQueue(){ return new Queue(MqConstant.BIG_CAR_TOPIC); } @Bean public Queue smallCarQueue(){ return new Queue(MqConstant.SMALL_CAR_TOPIC); } @Bean public TopicExchange exchange(){ return new TopicExchange(MqConstant.topicExchange); } @Bean Binding bindingExchangeMessage(){ return BindingBuilder.bind(bigCarQueue()).to(exchange()).with(MqConstant.BIG_CAR_TOPIC); } @Bean public Binding bindingExchangeMessageSmall(){ return BindingBuilder.bind(smallCarQueue()).to(exchange()).with(MqConstant.TOPIC_ALL); } }
TopicBigCarReceiver 消费者:
package com.kexuexiong.shushan.common.mq; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import java.util.Map; @Slf4j @Component @RabbitListener(queues = MqConstant.BIG_CAR_TOPIC) public class TopicBigCarReceiver { @RabbitHandler public void process(Map msg){ log.info("topicBigCarReceiver msg :"+msg); } }
TopicSmallCarReceiver 消费者:
package com.kexuexiong.shushan.common.mq; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import java.util.Map; @Slf4j @Component @RabbitListener(queues = MqConstant.SMALL_CAR_TOPIC) public class TopicSmallCarReceiver { @RabbitHandler public void process(Map msg){ log.info("TopicSmallCarReceiver msg :"+msg); } }
package com.kexuexiong.shushan.controller.mq; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.RandomUtil; import com.kexuexiong.shushan.common.mq.MqConstant; import com.kexuexiong.shushan.controller.BaseController; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.MessagePostProcessor; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.UUID; @Slf4j @RestController @RequestMapping("/mq/") public class MqController extends BaseController { @Autowired RabbitTemplate rabbitTemplate; @GetMapping("/sendTopicMessageBigCar") public String sendTopicMessageBigCar(){ String msgId = UUID.randomUUID().toString(); String msg = "demo msg ,BIG CAR"; String createTime = DateUtil.format(new Date(),"YYYY-MM-dd HH:mm:ss"); Map<String,Object> map = new HashMap(); map.put("msgId",msgId); map.put("msg",msg); map.put("createTime",createTime); rabbitTemplate.convertAndSend(MqConstant.topicExchange,MqConstant.BIG_CAR_TOPIC,map); return "ok"; } @GetMapping("/sendTopicMessageSmallCar") public String sendTopicMessageSmallCar(){ String msgId = UUID.randomUUID().toString(); String msg = "demo msg ,small CAR"; String createTime = DateUtil.format(new Date(),"YYYY-MM-dd HH:mm:ss"); Map<String,Object> map = new HashMap(); map.put("msgId",msgId); map.put("msg",msg); map.put("createTime",createTime); rabbitTemplate.convertAndSend(MqConstant.topicExchange,MqConstant.SMALL_CAR_TOPIC,map); return "ok"; } }
2023-10-10T16:37:05.876+08:00 INFO 27232 --- [ntContainer#5-1] c.k.s.common.mq.TopicBigCarReceiver : topicBigCarReceiver msg :{msg=demo msg ,BIG CAR, createTime=2023-10-10 16:37:05, msgId=333bb01b-0bf9-4d24-b140-f2814fb0e416}
2023-10-10T16:37:05.876+08:00 INFO 27232 --- [ntContainer#6-1] c.k.s.common.mq.TopicSmallCarReceiver : TopicSmallCarReceiver msg :{msg=demo msg ,BIG CAR, createTime=2023-10-10 16:37:05, msgId=333bb01b-0bf9-4d24-b140-f2814fb0e416}
2023-10-10T16:37:05.878+08:00 INFO 27232 --- [nectionFactory2] c.k.shushan.common.config.RabbitConfig : confirmCallback data: null
2023-10-10T16:37:05.879+08:00 INFO 27232 --- [nectionFactory2] c.k.shushan.common.config.RabbitConfig : confirmCallback ack :true
2023-10-10T16:37:05.879+08:00 INFO 27232 --- [nectionFactory2] c.k.shushan.common.config.RabbitConfig : confirmCallback cause :null
应为SMALL_CAR_TOPIC既符合topic.big_car
也符合topic.#
,所以消息都会被路由进SMALL_CAR_TOPIC队列和BIG_CAR_TOPIC队列中。
2023-10-10T16:42:07.369+08:00 INFO 27232 --- [ntContainer#6-1] c.k.s.common.mq.TopicSmallCarReceiver : TopicSmallCarReceiver msg :{msg=demo msg ,small CAR, createTime=2023-10-10 16:42:07, msgId=fa42a681-22cc-4489-b816-c2fae6050b98}
2023-10-10T16:42:07.370+08:00 INFO 27232 --- [nectionFactory3] c.k.shushan.common.config.RabbitConfig : confirmCallback data: null
2023-10-10T16:42:07.370+08:00 INFO 27232 --- [nectionFactory3] c.k.shushan.common.config.RabbitConfig : confirmCallback ack :true
2023-10-10T16:42:07.370+08:00 INFO 27232 --- [nectionFactory3] c.k.shushan.common.config.RabbitConfig : confirmCallback cause :null
该消息只有TopicSmallCarReceiver 消费。
FanoutRabbitConfig :
package com.kexuexiong.shushan.common.mq; 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; @Configuration public class FanoutRabbitConfig { @Bean public Queue queueA(){ return new Queue(MqConstant.FANOUT_A); } @Bean public Queue queueB(){ return new Queue(MqConstant.FANOUT_B); } @Bean public Queue queueC(){ return new Queue(MqConstant.FANOUT_C); } @Bean FanoutExchange fanoutExchange(){ return new FanoutExchange(MqConstant.FANOUT_EXCHANGE); } @Bean public Binding bindingExchangeA(){ return BindingBuilder.bind(queueA()).to(fanoutExchange()); } @Bean public Binding bindingExchangeB(){ return BindingBuilder.bind(queueB()).to(fanoutExchange()); } @Bean public Binding bindingExchangeC(){ return BindingBuilder.bind(queueC()).to(fanoutExchange()); } }
FanoutAReceiver 消费者:
package com.kexuexiong.shushan.common.mq; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import java.util.Map; @Slf4j @Component @RabbitListener(queues = MqConstant.FANOUT_A) public class FanoutAReceiver { @RabbitHandler public void process(Map msg){ log.info("FanoutAReceiver msg :"+msg); } }
FanoutBReceiver 消费者:
package com.kexuexiong.shushan.common.mq; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import java.util.Map; @Slf4j @Component @RabbitListener(queues = MqConstant.FANOUT_B) public class FanoutBReceiver { @RabbitHandler public void process(Map msg){ log.info("FanoutBReceiver msg :"+msg); } }
FanoutCReceiver 消费者:
package com.kexuexiong.shushan.common.mq; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import java.util.Map; @Slf4j @Component @RabbitListener(queues = MqConstant.FANOUT_C) public class FanoutCReceiver { @RabbitHandler public void process(Map msg){ log.info("FanoutCReceiver msg :"+msg); } }
MqController 生产者:
package com.kexuexiong.shushan.controller.mq; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.RandomUtil; import com.kexuexiong.shushan.common.mq.MqConstant; import com.kexuexiong.shushan.controller.BaseController; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.MessagePostProcessor; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.UUID; @Slf4j @RestController @RequestMapping("/mq/") public class MqController extends BaseController { @Autowired RabbitTemplate rabbitTemplate; @GetMapping("/sendTopicMessageFanoutMsg") public String sendTopicMessageFanoutMsg(){ String msgId = UUID.randomUUID().toString(); String msg = "demo msg ,fanout msg"; String createTime = DateUtil.format(new Date(),"YYYY-MM-dd HH:mm:ss"); Map<String,Object> map = new HashMap(); map.put("msgId",msgId); map.put("msg",msg); map.put("createTime",createTime); rabbitTemplate.convertAndSend(MqConstant.FANOUT_EXCHANGE,null,map); return "ok"; } }
测试:
2023-10-10T16:46:36.226+08:00 INFO 27232 --- [ntContainer#4-1] c.k.shushan.common.mq.FanoutCReceiver : FanoutCReceiver msg :{msg=demo msg ,fanout msg, createTime=2023-10-10 16:46:36, msgId=eca24bc1-4c70-456a-b026-b5d9b7ef0c21}
2023-10-10T16:46:36.226+08:00 INFO 27232 --- [ntContainer#3-1] c.k.shushan.common.mq.FanoutBReceiver : FanoutBReceiver msg :{msg=demo msg ,fanout msg, createTime=2023-10-10 16:46:36, msgId=eca24bc1-4c70-456a-b026-b5d9b7ef0c21}
2023-10-10T16:46:36.226+08:00 INFO 27232 --- [ntContainer#2-1] c.k.shushan.common.mq.FanoutAReceiver : FanoutAReceiver msg :{msg=demo msg ,fanout msg, createTime=2023-10-10 16:46:36, msgId=eca24bc1-4c70-456a-b026-b5d9b7ef0c21}
2023-10-10T16:46:36.229+08:00 INFO 27232 --- [nectionFactory4] c.k.shushan.common.config.RabbitConfig : confirmCallback data: null
2023-10-10T16:46:36.229+08:00 INFO 27232 --- [nectionFactory4] c.k.shushan.common.config.RabbitConfig : confirmCallback ack :true
2023-10-10T16:46:36.229+08:00 INFO 27232 --- [nectionFactory4] c.k.shushan.common.config.RabbitConfig : confirmCallback cause :null
FanoutAReceiver 、FanoutBReceiver 、FanoutCReceiver 都收到了消息,相当于广播。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。