一、广播模式交换机

 package com.dst.common.mq.constant;/*** @author liuweiping@dstcar.com* @version 1.0* @date 2022-12-30 09:46:21*/
public class MqConstForWorkOrderBaseInfo {/*** 工单中心状态改变发送mq消息*/public static final String EXCHANGE_FANOUT_WORK_ORDER_BASE = "exchange.fanout.work.order.base";public static final String QUEUE_WORK_ORDER_BASE = "queue.work.order.base";public static final String ROUTINGKEY_WORK_ORDER_BASE = "routingkey.work.order.base";}/*** 工单中心工单状态MQ绑定* @return*/@Beanpublic FanoutExchange workOrderBaseExchange() {return (FanoutExchange)ExchangeBuilder.fanoutExchange(MqConstForWorkOrderBaseInfo.EXCHANGE_FANOUT_WORK_ORDER_BASE + profile).build();}@Beanpublic Queue workOrderBaseQueue() {return  QueueBuilder.durable(MqConstForWorkOrderBaseInfo.QUEUE_WORK_ORDER_BASE + profile).build();}@Beanpublic Binding workOrderBaseBinding() {return BindingBuilder.bind(workOrderBaseQueue()).to(workOrderBaseExchange());}

二、消息生产者

package com.dst.common.mq.producer;import com.dst.common.mq.constant.MqConstForWorkOrderBaseInfo;
import com.dstcar.common.utils.json.JsonUtil;
import com.dstcar.entitys.workorderbase.message.event.WorkOrderBaseInfoStateChangeEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;/*** 工单中心完成属性变更消息生产者* @Author liu wei ping* @Date 2022/12/29 19:40* @Description:**/
@Slf4j
@Component
public class WorkOrderBaseInfoMessageProducer {@Value(value = "-${spring.profiles.active}")private String profile;@Autowiredprivate RabbitTemplate rabbitTemplate;/*** 主题交换机:工单中心状态改变发送消息** @param event*/@EventListener(WorkOrderBaseInfoStateChangeEvent.class)public void workOrderBaseInfoStateChange(WorkOrderBaseInfoStateChangeEvent event) {log.info("WorkOrderBaseInfoMessageProducer.workOrderBaseInfoStateChange:event: {}", JsonUtil.toJson(event));rabbitTemplate.convertAndSend(MqConstForWorkOrderBaseInfo.EXCHANGE_FANOUT_WORK_ORDER_BASE + profile, "", event.getSource());}}

三、消息消费者

package com.dst.common.mq.consumer;import com.dst.common.mq.constant.MqConstForWorkOrderBaseInfo;
import com.dst.modules.business.workorder.workorderbase.service.workorderhandler.WorkOrderPostHandler;
import com.dst.modules.business.workorder.workorderbase.service.workorderhandler.WorkOrderPostHandlerFactory;
import com.dstcar.common.constant.WorkOrderStatusConst;
import com.dstcar.common.utils.json.JsonUtil;
import com.dstcar.common.utils.string.StringUtil;
import com.dstcar.entitys.workorderbase.message.WorkOrderBaseInfoMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.nio.charset.StandardCharsets;
import java.util.Objects;/*** @author liuweiping@dstcar.com* @version 1.0* @date 2022-12-30 09:46:21*/
@Component
public class WorkOrderBaseInfoMQConsumer {private static final Logger log = LoggerFactory.getLogger(WorkOrderBaseInfoMQConsumer.class);@Autowiredprivate WorkOrderPostHandlerFactory workOrderPostHandlerFactory;/*** 工单中心状态改变、验车工单完成回调才会修改车辆属性状态* @param msg*/@RabbitHandler@RabbitListener(queues = MqConstForWorkOrderBaseInfo.QUEUE_WORK_ORDER_BASE + "-${spring.profiles.active}")public void process(Message msg) {try {byte[] bytes = msg.getBody();if(StringUtil.isEmpty(bytes)){log.warn("WorkOrderBaseInfoMQConsumer:接收MQ消息为空");return;}String data = new String(bytes, StandardCharsets.UTF_8);log.info("WorkOrderBaseInfoMQConsumer:接收MQ消息 ==> {}",data);WorkOrderBaseInfoMessage workOrderBaseInfoMessage =  JsonUtil.toBean(data, WorkOrderBaseInfoMessage.class);if (Objects.nonNull(workOrderBaseInfoMessage.getStatus()) && WorkOrderStatusConst.WORK_ORDER_STATUS_BASE_3.equals(workOrderBaseInfoMessage.getStatus())) {handMessage(workOrderBaseInfoMessage);}} catch (Exception e) {log.error("WorkOrderBaseInfoMQConsumer:接收MQ消息处理失败 \n",e);}}/*** 处理完成工单的属性修改* @param workOrderBaseInfoMessage*/private void handMessage(WorkOrderBaseInfoMessage workOrderBaseInfoMessage){// 工单模板编码WorkOrderPostHandler handler = workOrderPostHandlerFactory.getHandler(workOrderBaseInfoMessage.getTemplateCode());if (Objects.nonNull(handler)) {handler.handlerComplete(workOrderBaseInfoMessage);} else {log.error("根据模板编码未得到执行实例: {}",workOrderBaseInfoMessage.getTemplateCode());}}
}

四、页面控制台发送mq消息

RabbitMq应用相关推荐

  1. RabbitMQ 入门系列(11)— RabbitMQ 常用的工作模式(simple模式、work模式、publish/subscribe模式、routing模式、topic模式)

    1. simple 模式 simple 模式是最简单最常用的模式 2. work 模式 work 模式有多个消费者 消息产生者将消息放入队列.生产者系统不需知道哪一个任务执行系统在空闲,直接将任务扔到 ...

  2. Go 学习笔记(57)— Go 第三方库之 amqp (RabbitMQ 生产者、消费者整个流程)

    1. 安装 rabbitmq 的 golang 包 golang 可使用库 github.com/streadway/amqp 操作 rabbitmq .使用下面命令安装 RabbitMQ . go ...

  3. RabbitMQ 入门系列(4)— RabbitMQ 启动、停止节点和应用程序、用户管理、权限配置

    1. 服务器管理 我们使用 "节点" 来指代 RabbitMQ 实例,当我们谈到 RabbitMQ 节点时指的是 RabbitMQ 应用程序和其所在的 Erlang 节点. 1.1 ...

  4. RabbitMQ 入门系列(3)— 生产者消费者 Python 代码实现

    生产者消费者代码示例 上一章节中对消息通信概念做了详细的说明,本章节我们对 RabbitMQ 生产者和消费者代码分别做一示例说明. 1. 生产者代码 #!/usr/bin/env python # c ...

  5. RabbitMQ 入门系列(2)— 生产者、消费者、信道、代理、队列、交换器、路由键、绑定、交换器

    本系列是「RabbitMQ实战:高效部署分布式消息队列」和 「RabbitMQ实战指南」书籍的读书笔记. RabbitMQ 中重要概念 1. 生产者 生产者(producer)创建消息,然后发送到代理 ...

  6. RabbitMQ 入门系列(1)— Ubuntu 安装 RabbitMQ 及配置

    1. RabbitMQ 简介 消息 (Message) 是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串.JSON等,也可以很复杂,比如内嵌对象. 消息队列中间件(Message Que ...

  7. RabbitMQ超详细安装教程(Linux)

    目录 1.简介 2.下载安装启动RabbitMQ 2.1.下载RabbitMQ 2.2.下载Erlang 2.3.安装Erlang 2.4.安装RabbitMQ 2.5.启动RabbitMQ服务 3. ...

  8. 第五节 RabbitMQ在C#端的应用-消息收发

    原文:第五节 RabbitMQ在C#端的应用-消息收发 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/phocus1/article/details/873 ...

  9. RabbitMQ学习笔记一:本地Windows环境安装RabbitMQ Server

    一:安装RabbitMQ需要先安装Erlang语言开发包,百度网盘地址:http://pan.baidu.com/s/1jH8S2u6.直接下载地址:http://erlang.org/downloa ...

  10. RabbitMQ使用及与spring boot整合

    1.MQ 消息队列(Message Queue,简称MQ)--应用程序和应用程序之间的通信方法 应用:不同进程Process/线程Thread之间通信 比较流行的中间件: ActiveMQ Rabbi ...

最新文章

  1. java如何通过grpc连接etcd_grpc通过 etcd 实现服务发现与注册-源码分析
  2. IE浏览器中Image对象onload失效的解决办法
  3. 去大公司和小公司实习对比
  4. 【元胞自动机】基于matlab元胞自动机单边教室疏散【含Matlab源码 1207期】
  5. 机顶盒天线接头怎么接_户户通天线怎么安装图解
  6. h5问卷调查 html模版,问卷调查H5模板制作流程
  7. 百度网盘下载加速方法(免会员免破解官方正规)
  8. 再见,MySQL !
  9. VML编辑器代码实现(转载)
  10. 基于CST相控阵天线快速设计方法
  11. 15道HTML5基础面试题(附答案)
  12. 万字博文让我们携手一起走进bs4的世界【python Beautifulsoup】bs4入门 find()与find_all()
  13. 【手把手教你】使用Logistic回归、LDA和QDA模型预测指数涨跌
  14. 普通代码块,静态代码块,构造代码块,构造方法
  15. java并法库_沈阳法库县婚姻挽回该怎么做,异地恋相处
  16. 刚做测试工作一年的时候,我是怎样的?
  17. C程序设计语言(The C Programming Language)读书笔记
  18. C语言描述死锁检测算法,天津科技大学计算机科学与信息工程学院2013考研复试考试大纲...
  19. MindMaster---成功案例
  20. MySQL流水账(一)

热门文章

  1. 72.全卷积神经网络(FCN)及代码实现
  2. 卷积神经网络CNN-全连接层
  3. for(auto a :b)
  4. leetcode第一题
  5. 深度理解RNN的梯度消失和LSTM为什么能解决梯度消失
  6. opencv 边缘检测,角点检测
  7. vsto下开发wps插件
  8. linux lsiutil raid创建,使用Lsiutil管理Dell SAS 6i/R
  9. AMiner权威发布区块链大数据报告(附下载)
  10. input搜索框在ios系统中兼容问题