rocketMQ

rocketMQ
RocketMQ 是阿里巴巴开源的分布式消息中间件。支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。
学习基本概念需要自己学习了解的相关概念生产者消费者Topictags发送广播消息配置打开rocketMQ-Console页面,选中topic标签,搜索需要发送的topic是否存在,搜索页面如下
rocketMQ_第1张图片如果存在,则开始编写代码,如果不存在,需要手动添加topic,添加页面如下
rocketMQ_第2张图片clusterName和BROKER_NAME直接选中已有的数据,topicName填写需要发送的topic,点击提交即可添加成功

MessageDTO messageDTO = MessageDTO.builder()
    .msgId(outTradeNo)
    .topic(MqConstants.MQ_TOPIC.PHY_ORDER.getTopic())
    .tag(MqConstants.TAG_PHY_ORDER_CANCEL)
    .body(createCancelOrderMessage(outTradeNo, hosId).toJSONString())
    .source(MicroServiceConstants.LOCAL_PATIENT)
    .destination(MicroServiceConstants.LOCAL_PATIENT)
    .delayLevel(delayLevel)
    .build();
cloudProducerSendMsgHandler.sendP2P(messageDTO, GlobalConstants.SWIFT_HOS_ID);

给云mq服务发消息,用的 CloudProducerSendMsgHandler 处理器
给本地mq服务发消息,用的 LocalProducerSendMsgHandler 处理器
topic和tag必须在MqConstants中定义
body中传入消息内容,已String形式传值
source字段传入生产消息的服务
destination字段传入消费消息的服务
delayLevel字段传入延迟级别,不传时默认不用延迟,需要延迟时,可看MessageDTO中定义的延迟消息不同值的含义,代码中有备注
sendP2P方法的第二个入参为hosId,传入0时,代表云上服务消费,传入医院编码,代表本地服务消费,如果发送mq不成功时,可以核对此处hosId是否传值正确
确认是否发送成功
打开rocketMQ-Console页面,选中Message标签,默认进入topic页面,在topic选项中选中发送的topic选项,时间控制在发送时间内,点击搜索,能搜索到发送记录,代表已经发送成功,页面如下
rocketMQ_第3张图片点击右侧 MESSAGE DETAIL按钮,即可查看消息的详情以及消费情况

消费广播消息
配置
消费消息需要确认以下两个地方是否正确配置

  1. nacos
    需要在nacos中配置需要消费的topic,示例如下
# rocketMq 配置
cloud:
producerEnable: true
#启动mq consumer 
consumerEnable: true
rocketMq:
namesrv: rocketmq-test-001.swifthealth.cn:9876;rocketmq-test-002.swifthealth.cn:9876
maxReproducerTimes: 3
topic: CLOUD_2_LOCAL_BROADCAST,CLOUD_PHARMACY_2_LOCAL,CLOUD_2_CLOUD_MANAGE_SETTLE,WECHAT_RELATED_DATA
local:
producerEnable: true
#启动mq consumer 
consumerEnable: true
rocketMq:
namesrv: local-rocketmq-001:9876;local-rocketmq-002:9876
maxReproducerTimes: 3
    topic: LOCAL_2_LOCAL_DRUG_PRICE_ALTER_DATA,LOCAL_O2P_RECIPE_UPDATE_UPDATE_PG_ORDER,LOCAL_2_CLOUD_CARDBIND,LOCAL_2_LOCAL_PATIENT_CARD,PHY_ORDER

2.ocketMQ-Console
消费的服务必须在消费者的列表中,如果不存在则需要手动添加

rocketMQ_第4张图片如上如所示,打开rocketMQ-Console页面,选中Consumer标签,在SubscriptionGroup中搜索消费的服务,如果不存在该服务,则需要添加服务,brokerName选中已有选项,groupName填写服务拼接hosId,例如:local-patient-15010100,填写完成后,点击commit即可添加成功
代码处理
首先,需要确保topic和tag必须在MqConstants中定义,并且要消费的topic和要消费的tag必须在MqConstants.MQ_TOPIC枚举中存在,如果一个topic有多个tag需要消费,则需要用||符号将多个tag拼接起来

LOCAL_2_CLOUD_BASICDATA("LOCAL_2_CLOUD_BASICDATA",
                TAG_DIC + "||" + TAG_DEPT + "||" + TAG_DRUG + "||" + TAG_DOCT,
                "上传基础数据(字典|科室|药品|医生)")

然后在消费处理器中处理获取到的消息
rocketMQ_第5张图片不同服务的消费处理器的明明方式不一致,所有处理器都是继承类 AbstractMessageListener ,消费的时候,有些是同一个topic一个处理逻辑,有些是同一个topic,不同的tag,不同的处理逻辑,根据具体业务逻辑决定
确认是否消费成功

  1. 查看日志确定消息是否消费
  2. 查看rocketMQ-Console,在消息详情中查看消息是否被消费
  3. rocketMQ_第6张图片

你可能感兴趣的:(rocketmq)