فهرست منبع

'在service-fire服务中新增RabbitMQ对应的fanout广播模式,创建广播交换机,生产者发送一个消息到这个广播交换机,所有绑定这个广播交换机的消费者都能消费这个消息'

james 10 ماه پیش
والد
کامیت
65d16449d3

+ 9 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/config/rabbitmq/RabbitMQConfig.java

@@ -7,6 +7,7 @@ import org.springframework.context.annotation.Configuration;
 
 @Configuration
 public class RabbitMQConfig {
+    //点对点
     //队列
     public String patrolEventQueue = "Patrol_QEvent";
     //交换机
@@ -32,6 +33,14 @@ public class RabbitMQConfig {
         return BindingBuilder.bind(patrolQueue()).to(patrolExchange()).with(patrolEventRoute);
     }
 
+    //广播
+    public String patrolFEventExchange = "Patrol_FEvent";
+
+    @Bean
+    public FanoutExchange patrolFExchange(){
+        return new FanoutExchange(patrolFEventExchange,true,false);
+    }
+
 
 }
 

+ 5 - 2
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/PatrolInspectionEventServiceImpl.java

@@ -1,5 +1,7 @@
 package com.usky.fire.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.nacos.shaded.com.google.gson.JsonObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -85,7 +87,7 @@ public class PatrolInspectionEventServiceImpl extends AbstractCrudService<Patrol
         patrolInspectionEvent.setCreateBy(SecurityUtils.getUsername());
         patrolInspectionEvent.setCreateTime(LocalDateTime.now());
 
-        Map<String,Object> map = new HashMap<>();
+        Map<Object,Object> map = new HashMap<>();
         map.put("deviceId",patrolInspectionEvent.getDeviceId());
         map.put("personnelId",patrolInspectionEvent.getPersonnelId());
         map.put("personnelName",patrolInspectionEvent.getPersonnelName());
@@ -100,7 +102,8 @@ public class PatrolInspectionEventServiceImpl extends AbstractCrudService<Patrol
         map.put("createBy",patrolInspectionEvent.getCreateBy());
         map.put("createTime",patrolInspectionEvent.getCreateTime());
 
-        rabbitTemplate.convertAndSend(rabbitMQConfig.patrolEventExchange,rabbitMQConfig.patrolEventRoute,map);
+//        rabbitTemplate.convertAndSend(rabbitMQConfig.patrolEventExchange,rabbitMQConfig.patrolEventRoute,map);
+        rabbitTemplate.convertAndSend(rabbitMQConfig.patrolFEventExchange,"", JSONObject.toJSONString(map));
 
         this.save(patrolInspectionEvent);
     }

+ 17 - 2
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/listener/RabbitMQListener.java

@@ -1,8 +1,9 @@
 package com.usky.fire.service.listener;
 
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.rabbit.annotation.RabbitHandler;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.amqp.core.ExchangeTypes;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -17,4 +18,18 @@ public class RabbitMQListener {
     public void process(Map testMessage){
         System.out.println("DirectReceiver消费者收到消息: " + testMessage.toString());
     }
+
+    @RabbitHandler
+    @RabbitListener(bindings = @QueueBinding(
+            value = @Queue(),
+            exchange = @Exchange(value = "Patrol_FEvent",type = ExchangeTypes.FANOUT)
+    ))
+    public void getData(Message message){
+        try {
+            String str = new String(message.getBody(),"utf-8");
+            System.out.println("FanoutReceiver消费者收到消息: " + str);
+        } catch (Exception e){
+            e.printStackTrace();
+        }
+    }
 }