RocketMQ同一个消费者唯一Topic多个tag踩坑经历
最近做的项目的一个版本需求中,需要用到MQ,对数据记录进行异步落库,这样可以减轻数据库的压力,同时可以抗住大量的数据落库。这里需要说明一下本人用到的MQ是公司自己在阿里的RokectMQ的基础上进行封装的,然后加上自己的东西,形成个性化的开发,且安全性高。这里就不多透露相关公司的信息啦,我就叫它MQ。
由于刚刚从事JAVA开发这个行业不久,所以在使用到这个MQ的时候本人还是比较陌生的,于是花了一些时间去学习,当然学习的时候能记住的东西还是不多的,因为在学习理论的时候,没有真正的去实践,效果不是很明显,就这样学的也是云里雾里。对公司的MQ有了最基本的了解之后,就开始动手撸代码了,在这个需求中引入了公司的MQ依赖jar包,然后在开发环境中配置好相关的MQ信息,写了一个消费MQ的类,当然发消息的代码还是很好写的。
MQ生产者的核心代码:
@Autowired
private MqsTemplate mqsTemplate ;
public void sendMqs(String key, ContentDto dto){
String content = JSON.toJSONString(dto);
mqsTemplate.sendMessage(content, topic, tag, key);
}
MQ消费者的核心代码:
BaseConsumer.java
public abstract class BaseConsumer implements MqsListener<String>{
@Autowired
private TestMapperOne testMapperOne;
@Autowired
private TestMapperTwo testMapperTwo;
@Override
public void onMessage(String topic, String tag, String key, String message){
log.info("topic {} tag {} key {}", topic, tag, key);
try{
this.consumer(key, message, tag);
}catch(Exception e){
log.error(String.format("topic %s tag %s key %s message %s), topic, tag, key, message), e);
}
}
protected abstract void consumer(String key, String message, String tag);
}
TestConsumer.java
@Service
@MqsMessageListener(consumerId = "${自己去MQ的页面去新增就行}",
//最开始的写法(错误的写法)
topicTags = ("${haha.mq.topic:TEST_HAHA}:${haha.mq.topic:TEST_TAG01};" +
"${haha.mq.topic:TEST_HAHA}:${haha.mq.topic:TEST_TAG02}")
//在这里对于同一个topic,使用“ ; ”分割是不当的,分号分割是指多个topicTags的topic是不同的,如果这里这样分割的话,
消息发送到MQ去,可以发现消息确实是发送到了MQ,但是没有被消费者消费,这也就是我遇到的坑了,由于开年刚来上班,公司的众
位大佬还没来上班,能问的人又很少,于是自己琢磨了一上午。
最终发现,原来是由于我在同一个项目的同一个类上的唯一topic对应了不同的tag,在MQ的页面可以清晰的看到,后面的tag覆盖了前面的tag,
显然这样是不合理的。
经过查阅资料发现,同一个类上的唯一topic对应不同的tag写法如下
正确写法:
topicTags = ("${haha.mq.topic:TEST_HAHA}:${haha.mq.topic:TEST_TAG01}||" +
"${haha.mq.topic:TEST_TAG02}")
)
在同一个类中(也就是一个消费者中),同一个topic对应不同的tag,应该使用 “ || ”进行分割,使用""或“*”订阅所有tag。
public class TestConsumer extends BaseConsumer {
//此处代码就不写了,主要就是根据不同的tag,然后把对应的数据请求持久层的接口,进行落库,当然这里我是为了省事,才踩到这样的坑,
其实针对不同的情况,就算是使用同一个topic订阅,分成两个类去写就ok了,在MQ中再新增一个消费者,这样在同一个项目的不同消费者类中,
一个topic对应一个tag。就算它们两个的topic是一样的都是没关系的,而且这样别人看起你的代码来,也是非常直观的,层次分明。
}
PS:这里补充一下
@MqsMessageListener 是消费者监听注解,用于发现消费者,以及属性包括消费所有单一功能的注解,作用在类上面。
以上就是踩到的RocketMQ的坑,由于开发经验有限,技术粗糙,上文的描述可能不是太清晰,可能会出现误点或者错误的地方,望大家给予建议,我加以改进,共同进步!
觉得此文不错的,点赞转发,本人非常感谢!
RocketMQ同一个消费者唯一Topic多个tag踩坑经历的更多相关文章
- 深入理解RocketMQ的消费者组、队列、Broker,Topic
1.遇到的问题:上测试环境,上次描述的鸟问题又出现了,就是生产者发3条数据,我这边只能收到1条数据. 2.问题解决: (1)去控制台看我的消费者启动情况,貌似没什么问题 , (2)去测试服务器里看日志 ...
- RocketMQ之消费者启动与消费流程
vivo 互联网服务器团队 - Li Kui 一.简介 1.1 RocketMQ 简介 RocketMQ是由阿里巴巴开源的分布式消息中间件,支持顺序消息.定时消息.自定义过滤器.负载均衡.pull/p ...
- RocketMQ入门(消费者)_3
消费者角色: 1. 推式(一般建议用推式) 2. 拉式 消费模式: 1. 集群(cluster) --均衡负载消费 2. 广播(broadcasting) --发布和订阅 ...
- 阿里云RocketMQ的消费者简单实现
业务场景之类的请看另一篇生产者的实现: package com.ttt.eee; import com.aliyun.openservices.ons.api.Action; import com.a ...
- RocketMQ 创建和删除 topic,以及 broker 和 nameserver 之间的心跳
命令行主类:org.apache.rocketmq.tools.command.MQAdminStartup 客户端创建 topic 程序参数:updateTopic -n localhost:987 ...
- RocketMQ初入门踩坑记
本文主要是讲在Centos中安装RocketMQ并做简单的示例.如果你按照本文安装100%是可以成功的,如果按照阿里官方的说明,那只能呵呵了~ 安装 官方地址为:https://rocketmq.ap ...
- RocketMQ踩坑记
一.前言 现在的主流消息队列基本都是kafka.RabbitMQ和RocketMQ,只有了解各自的优缺点才能在不同的场景选择合适的MQ,对比图如下: MQ对比图 本篇文章主要介绍我自己在跑官方demo ...
- 使用Azure Policy(策略)强制实现资源Tag的坑
Azure的Tag(标记)可以帮助运维人员对云资源分类从而方便地进行计费和资源管理.然而在具体实践中工程师部署云资源的时候常常会忘记给资源做标记打Tag. 针对这个问题,Azure的官方文档建议是可以 ...
- Docker安装rocketmq踩坑指南
Docker 网络 Docker容器运行的时候有host.bridge.none三种网络可供配置. 默认是bridge,即桥接网络,以桥接模式连接到宿主机:host是宿主网络,即与宿主机共用网络:no ...
随机推荐
- boss导出简历css
$('body').css('background-color', '#fff')$('.keywords').hide()$('#wrap').html($('.resume-box').css(' ...
- vb.net和C#两兄弟谁的封装性更好?
引言: 虽然没怎样接触过vb.net,但是大概对于vb6还是比较了解的.前者是从后者基础上发展而来的.后来接触了C#编程语言,起初没有太关心她和vb.net有啥不同的地方,话说都是面向对象的,而且都是 ...
- php之在admin的目录下的php文件里加上JSON的报头,运行php文件会提示下载
去掉报头就正常,但在前端引用数据时要加上JSON.parse,不然读不出数据. $.get("fetchUpLast.php",{ rd:new Date().getTime()} ...
- 2019牛客暑期多校训练营(第九场)J Symmetrical Painting (思维)
传送门 大体思路就是:枚举所有可能的水平对称线,计算面积更新答案. 所有可能的水平对称线:\(L_i,R_i,{L_i+R_i\over 2}\) 计算面积:将所有可能的水平对称线从小到大排序,然后依 ...
- Hiho1422 Harmonic Matrix Counter (高斯消元)
16年北京站A题 真的难啊.. 题意: 定义和谐矩阵 就是每个元素和上下左右的xor值=0 输出一个超大数 然后最多800个询问 求字典序第k小的和谐矩阵 x y位置上的数 题解: 首先这个超大数的范 ...
- Educational Codeforces Round 90 (Rated for Div. 2) D. Maximum Sum on Even Positions(dp)
题目链接:https://codeforces.com/contest/1373/problem/D 题意 给出一个大小为 $n$ 的数组 $a$,下标为 $0 \sim n - 1$,可以进行一次反 ...
- Educational Codeforces Round 97 (Rated for Div. 2) C. Chef Monocarp (DP)
题意:有\(n\)个菜在烤箱中,每个时刻只能将一个菜从烤箱中拿出来,第\(i\)个时刻拿出来的贡献是\(|i-a[i]|\),你可以在任意时刻把菜拿出来,问将所有菜拿出的最小贡献是多少? 题解: 先对 ...
- Django的settings配置文件
一.邮件配置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.qq.com' EMAI ...
- 牛客网多校第4场 J Hash Function 【思维+并查集建边】
题目链接:戳这里 学习博客:戳这里 题意: 有n个空位,给一个数x,如果x%n位数空的,就把x放上去,如果不是空的,就看(x+1)%n是不是空的. 现在给一个已经放过数的状态,求放数字的顺序.(要求字 ...
- 图解算法——链表中倒数第k个节点
题目来源: 剑指 Offer 22. 链表中倒数第k个节点 leetCode 题目描述: 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个 ...