六 SpringCloud - RabbitMQ安装,三种消息发送模式,消息发送确认,消息消费确认(自动,手动)( 三 )

3.1.4请求测试方法/** * Created On : 1/11/2022. * <p> * Author : huayu * <p> * Description: 测试 RabbitMQ 消息队列的操作入口 */@Slf4j@RestControllerpublic class RabbitMQController {@Autowiredprivate RabbitMQDirectProducer rabbitMQDirectProducer;/*** @author : Administrator* @date: 2022/11/1* @param: [directMsg]* @return : com.kgc.sct.util.RequestResult<java.lang.String>* @description : 测试direct直连模式,发送和消费消息*/@GetMapping("/direct")public RequestResult<String> testRabbitMQDirect(@RequestParam String directMsg){log.info("direct直连模式,发送消息");//模拟发送5条直连消息Stream.of(11,22,33,44,55).forEach(directNo ->{//模拟创建消息对象Map<String,Object> directMap =new HashMap<>();directMap.put("directNo",directNo);directMap.put("directData",directMsg);directMap.put("directTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));//调用直连模式消息生产者,发送消息rabbitMQDirectProducer.sendDirectMsg2DirectExchange(RabbitMQConstant.RABBITMQ_DIRECT_EXCHANGE_KH96,RabbitMQConstant.RABBITMQ_DIRECT_ROUTING_KEY_KH96,JSON.toJSONString(directMap));return ResultBuildUtil.success("使用直连模式 。发送消息成功");}}3.1.5 请求测试发起请求

六 SpringCloud - RabbitMQ安装,三种消息发送模式,消息发送确认,消息消费确认(自动,手动)

文章插图
3.1.5.1 一个消费者消费者One消费了队列中的所有信息(只有一个队列);
六 SpringCloud - RabbitMQ安装,三种消息发送模式,消息发送确认,消息消费确认(自动,手动)

文章插图
3.1.5.2 两个消费者消费者One和消费者Two依次消费了队列中的所有信息(只有一个队列);
六 SpringCloud - RabbitMQ安装,三种消息发送模式,消息发送确认,消息消费确认(自动,手动)

文章插图
3.2 Fanout 扇形模式3.2.1 配置类/** * Created On : 1/11/2022. * <p> * Author : huayu * <p> * Description: Fanout扇形模式,自动配置类,自动创建队列,交换机,并将队列绑定到交换机 */@Configurationpublic class RabbitMQFanoutConfig {//创建 扇形队列One@Beanpublic Queue fanoutQueueOne(){return new Queue(RabbitMQConstant.RABBITMQ_FANOUT_QUEUE_NAME_KH96_ONE);}//创建 扇形队列Two@Beanpublic Queue fanoutQueueTwo(){return new Queue(RabbitMQConstant.RABBITMQ_FANOUT_QUEUE_NAME_KH96_TWO);}// 创建扇形交换机@Beanpublic FanoutExchange fanoutExchange(){return new FanoutExchange(RabbitMQConstant.RABBITMQ_FANOUT_EXCHANGE_KH96);}//绑定队列到扇形交换机 , 不需要 指定 路由键@Beanpublic Binding fanoutBindingQueueOne(){//绑定队列到扇形交换机 , 不需要路由键,消息是广播发送,会给多有绑定的队列群发信息消息(根本没有提供with方法)return BindingBuilder.bind(fanoutQueueOne()).to(fanoutExchange());}@Beanpublic Binding fanoutBindingQueueTwo(){//绑定队列到扇形交换机,不需要路由键,消息是广播发送 , 会给多有绑定的队列群发信息消息(根本没有提供with方法)return BindingBuilder.bind(fanoutQueueTwo()).to(fanoutExchange());}}3.2.2 消息生产者/** * Created On : 1/11/2022. * <p> * Author : huayu * <p> * Description: RabbitMQFanoutProducer */@Slf4j@Componentpublic class RabbitMQFanoutProducer {@Autowiredprivate RabbitTemplate rabbitTemplate;/*** @author : huayu* @date: 1/11/2022* @param: [fanoutExchange, fanoutRoutingKey, fanoutMsg]* @return : void* @description : 使用扇形模式,发送消息到扇形交换机,将消息发送到绑定的队列中*/public void sendFanoutMsg2FanoutExchange(String fanoutExchange,String fanoutRoutingKey,String fanoutMsg){log.info("++++++ Fanout模式消息生产者,发送广播消息:{},到交换机:{} , 路由键:{} ++++++", fanoutMsg, fanoutExchange, fanoutRoutingKey);rabbitTemplate.convertAndSend(fanoutExchange, fanoutRoutingKey, fanoutMsg);}}3.2.3 消费者3.2.3.1 消费者One/** * Created On : 1/11/2022. * <p> * Author : huayu * <p> * Description: RabbitMQFanoutConsumerOne */@Slf4j@Component@RabbitListener(queues = RabbitMQConstant.RABBITMQ_FANOUT_QUEUE_NAME_KH96_ONE)public class RabbitMQFanoutConsumerOne {@RabbitHandlerpublic void fanoutConsumeOneFanoutMsgFromFanoutQueueOne(String fanoutMsgJson){log.info("****** Fanout扇形模式,消费One,消费队列One,消息:{}******",fanoutMsgJson);// TODO 核心业务逻辑处理}}3.2.3.2 消费者Two/** * Created On : 1/11/2022. * <p> * Author : huayu * <p> * Description: RabbitMQFanoutConsumerTwo */@Slf4j@Component//@RabbitListener(queues = RabbitMQConstant.RABBITMQ_FANOUT_QUEUE_NAME_KH96_TWO)public class RabbitMQFanoutConsumerTwo {//@RabbitHandlerpublic void fanoutConsumeTwoFanoutMsgFromFanoutQueueTwo(String fanoutMsgJson){log.info("****** Fanout扇形模式,消费Two,消费队列Two,消息:{}******",fanoutMsgJson);// TODO 核心业务逻辑处理}}3.2.4 请求测试方法/** * Created On : 1/11/2022. * <p> * Author : huayu * <p> * Description: 测试 RabbitMQ 消息队列的操作入口 */@Slf4j@RestControllerpublic class RabbitMQController {@Autowiredprivate RabbitMQFanoutProducer rabbitMQFanoutProducer;/*** @author : huayu* @date: 1/11/2022* @param: [fanoutMsg]* @return : com.kgc.scd.uitl.RequestResult<java.lang.String>* @description : 测试扇形(广播)模式,发送和消费信息*/@GetMapping("/fanout")public RequestResult<String> testRabbitMQFanout(@RequestParam String fanoutMsg){log.info("------- fanout 扇形模式 , 发送消息 -------");//模拟发送5条直连消息Stream.of(66,77,88,99,96).forEach(directNo ->{//模拟创建消息对象Map<String,Object> fanoutMap =new HashMap<>();fanoutMap.put("directNo",directNo);fanoutMap.put("directData",fanoutMsg);fanoutMap.put("directTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));//调用扇形模式消息生产者,发送消息rabbitMQFanoutProducer.sendFanoutMsg2FanoutExchange(RabbitMQConstant.RABBITMQ_FANOUT_EXCHANGE_KH96,null,JSON.toJSONString(fanoutMap));});return ResultBuildUtil.success("使用扇形模式 。发送消息成功");}}

推荐阅读