RabbitMq应用
一、广播模式交换机
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应用相关推荐
- RabbitMQ 入门系列(11)— RabbitMQ 常用的工作模式(simple模式、work模式、publish/subscribe模式、routing模式、topic模式)
1. simple 模式 simple 模式是最简单最常用的模式 2. work 模式 work 模式有多个消费者 消息产生者将消息放入队列.生产者系统不需知道哪一个任务执行系统在空闲,直接将任务扔到 ...
- Go 学习笔记(57)— Go 第三方库之 amqp (RabbitMQ 生产者、消费者整个流程)
1. 安装 rabbitmq 的 golang 包 golang 可使用库 github.com/streadway/amqp 操作 rabbitmq .使用下面命令安装 RabbitMQ . go ...
- RabbitMQ 入门系列(4)— RabbitMQ 启动、停止节点和应用程序、用户管理、权限配置
1. 服务器管理 我们使用 "节点" 来指代 RabbitMQ 实例,当我们谈到 RabbitMQ 节点时指的是 RabbitMQ 应用程序和其所在的 Erlang 节点. 1.1 ...
- RabbitMQ 入门系列(3)— 生产者消费者 Python 代码实现
生产者消费者代码示例 上一章节中对消息通信概念做了详细的说明,本章节我们对 RabbitMQ 生产者和消费者代码分别做一示例说明. 1. 生产者代码 #!/usr/bin/env python # c ...
- RabbitMQ 入门系列(2)— 生产者、消费者、信道、代理、队列、交换器、路由键、绑定、交换器
本系列是「RabbitMQ实战:高效部署分布式消息队列」和 「RabbitMQ实战指南」书籍的读书笔记. RabbitMQ 中重要概念 1. 生产者 生产者(producer)创建消息,然后发送到代理 ...
- RabbitMQ 入门系列(1)— Ubuntu 安装 RabbitMQ 及配置
1. RabbitMQ 简介 消息 (Message) 是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串.JSON等,也可以很复杂,比如内嵌对象. 消息队列中间件(Message Que ...
- RabbitMQ超详细安装教程(Linux)
目录 1.简介 2.下载安装启动RabbitMQ 2.1.下载RabbitMQ 2.2.下载Erlang 2.3.安装Erlang 2.4.安装RabbitMQ 2.5.启动RabbitMQ服务 3. ...
- 第五节 RabbitMQ在C#端的应用-消息收发
原文:第五节 RabbitMQ在C#端的应用-消息收发 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/phocus1/article/details/873 ...
- RabbitMQ学习笔记一:本地Windows环境安装RabbitMQ Server
一:安装RabbitMQ需要先安装Erlang语言开发包,百度网盘地址:http://pan.baidu.com/s/1jH8S2u6.直接下载地址:http://erlang.org/downloa ...
- RabbitMQ使用及与spring boot整合
1.MQ 消息队列(Message Queue,简称MQ)--应用程序和应用程序之间的通信方法 应用:不同进程Process/线程Thread之间通信 比较流行的中间件: ActiveMQ Rabbi ...
最新文章
- java如何通过grpc连接etcd_grpc通过 etcd 实现服务发现与注册-源码分析
- IE浏览器中Image对象onload失效的解决办法
- 去大公司和小公司实习对比
- 【元胞自动机】基于matlab元胞自动机单边教室疏散【含Matlab源码 1207期】
- 机顶盒天线接头怎么接_户户通天线怎么安装图解
- h5问卷调查 html模版,问卷调查H5模板制作流程
- 百度网盘下载加速方法(免会员免破解官方正规)
- 再见,MySQL !
- VML编辑器代码实现(转载)
- 基于CST相控阵天线快速设计方法
- 15道HTML5基础面试题(附答案)
- 万字博文让我们携手一起走进bs4的世界【python Beautifulsoup】bs4入门 find()与find_all()
- 【手把手教你】使用Logistic回归、LDA和QDA模型预测指数涨跌
- 普通代码块,静态代码块,构造代码块,构造方法
- java并法库_沈阳法库县婚姻挽回该怎么做,异地恋相处
- 刚做测试工作一年的时候,我是怎样的?
- C程序设计语言(The C Programming Language)读书笔记
- C语言描述死锁检测算法,天津科技大学计算机科学与信息工程学院2013考研复试考试大纲...
- MindMaster---成功案例
- MySQL流水账(一)