1. 问题描述

rocketmq 生产者发消息正常 mq后台也可以看到发出的消息

但是消费者一直没消费 好像订阅没成功

2. 问题排查

通过上图查看 确实没有检测到订阅者

3. 问题解决

线上环境是 两台机器 共四个实例

项目中订阅了两个不同地址不同topic的mq

然后那个instanceName会有命名冲突

ip@进程id

重新修改instanceName的value

//设置instanceName
 defaultMQPushConsumer.setInstanceName(System.currentTimeMillis()+ JVMRandom.nextLong(10)+"");

spring-rocketmq.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd">
  6.  
  7. <!--好评加分 差评扣分-->
  8. <bean id="evaluationConsumer" class="org.apache.rocketmq.client.consumer.DefaultMQPushConsumer">
  9. <property name="consumerGroup" value="${driver_x_group}"/>
  10. <property name="namesrvAddr" value="${driver_x_url}"/>
  11. </bean>
  12. <!--好评消费者 监听器-->
  13. <bean id="evaluationMessageListener" class="com.x.mq.EvaluationXListener"/>
  14. <!--消费者启动类-->
  15. <bean id="evaluationOrderlyConsumer" class="com.x.mq.base.EvaluationXConsumer"
  16. init-method="init" destroy-method="destroy" scope="singleton">
  17. <property name="defaultMQPushConsumer" ref="evaluationConsumer"/>
  18. <property name="evaluationMessageListener" ref="evaluationMessageListener"/>
  19. <property name="topic" value="${driver_score_topic}"/>
  20. <property name="tag" value=""/>
  21. </bean>
  22. </beans>

consumer.java

  1. package com.x.mq.base;
  2.  
  3. import com.x.mq.EvaluationMessageListener;
  4. import org.apache.commons.lang.math.JVMRandom;
  5. import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
  6. import org.apache.rocketmq.client.exception.MQClientException;
  7. import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
  8. import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11.  
  12. import java.util.Random;
  13.  
  14. /**
  15. * Created by admin on 2018/1/31.
  16. */
  17. public class EvaluationConsumer {
  18. private static final Logger logger = LoggerFactory.getLogger(EvaluationConsumer.class);
  19. private DefaultMQPushConsumer defaultMQPushConsumer;
  20. private EvaluationMessageListener evaluationMessageListener;
  21. private String tag;
  22. private String topic;
  23.  
  24. public EvaluationMessageListener getEvaluationMessageListener() {
  25. return evaluationMessageListener;
  26. }
  27.  
  28. public void setEvaluationMessageListener(EvaluationMessageListener evaluationMessageListener) {
  29. this.evaluationMessageListener = evaluationMessageListener;
  30. }
  31.  
  32. public String getTag() {
  33. return tag;
  34. }
  35.  
  36. public void setTag(String tag) {
  37. this.tag = tag;
  38. }
  39.  
  40. public String getTopic() {
  41. return topic;
  42. }
  43.  
  44. public void setTopic(String topic) {
  45. this.topic = topic;
  46. }
  47.  
  48. public DefaultMQPushConsumer getDefaultMQPushConsumer() {
  49. return defaultMQPushConsumer;
  50. }
  51.  
  52. public void setDefaultMQPushConsumer(DefaultMQPushConsumer defaultMQPushConsumer) {
  53. this.defaultMQPushConsumer = defaultMQPushConsumer;
  54. }
  55.  
  56. public void init() throws MQClientException {
  57. // 订阅指定Topic下tags
  58. defaultMQPushConsumer.subscribe(topic, tag);
  59. // 设置Consumer第一次启动是从队列头部开始消费还是队列尾部开始消费<br>
  60. // 如果非第一次启动,那么按照上次消费的位置继续消费
  61. defaultMQPushConsumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
  62. // 设置为集群消费(区别于广播消费):集群只消费一次,广播会被多个消费者消费
  63. defaultMQPushConsumer.setMessageModel(MessageModel.CLUSTERING);
  64. // defaultMQPushConsumer.registerMessageListener(messageListenerConcurrently);
  65. defaultMQPushConsumer.registerMessageListener(evaluationMessageListener);
  66. //设置instanceName
  67. defaultMQPushConsumer.setInstanceName(System.currentTimeMillis()+ JVMRandom.nextLong(10)+"");
  68. // 批量消费
  69. defaultMQPushConsumer.setConsumeMessageBatchMaxSize(20);
  70. // Consumer对象在使用之前必须要调用start初始化,初始化一次即可<br>
  71. defaultMQPushConsumer.start();
  72. logger.info("==rocketmq==DefaultMQPushConsumer start success! consumerGroup:{},nameServiceAddr:{},topic:{},tag:{}",defaultMQPushConsumer.getConsumerGroup(),defaultMQPushConsumer.getNamesrvAddr(),topic,tag);
  73. }
  74. public void destroy(){
  75. defaultMQPushConsumer.shutdown();
  76. }
  77. }

rocketmq Don't have SubscriptionGroup的更多相关文章

  1. RocketMQ原理解析-Broker

    broker 1. broker的启动 brker的启动 Broker向namesrv注册 1. 获取namesrv的地址列表(是乱序的) 2. 遍历向每个namesrv注册topic的配置信息top ...

  2. 分布式消息队列RocketMQ部署

    一.RocketMQ简介: RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: 1.支持严格的消息顺序: 2.支持Topic与Queue两种模式: 3.亿级消息堆积能力: 4.比较友好 ...

  3. rocketMq概念介绍

    rocketMq官网 http://rocketmq.apache.org/ rocketMq逻辑概念介绍 rocketMq逻辑图 备注:    改图片分享自李占卫的网上家园 说明: 在rocketM ...

  4. (原创)Rocketmq分布式消息队列的部署与监控

    -------------------------------------------------------------------------------------------- 一.Rocke ...

  5. RocketMQ中Broker的启动源码分析(一)

    在RocketMQ中,使用BrokerStartup作为启动类,相较于NameServer的启动,Broker作为RocketMQ的核心可复杂得多 [RocketMQ中NameServer的启动源码分 ...

  6. RocketMQ 主题扩分片后遇到的坑

    目录 1.案情回顾 1.1 集群现状 1.2.RocketMQ 在线扩容队列 1.3 消息发送 2.问题暴露 3.问题分析 4.问题复盘 消息组接到某项目组反馈,topic 在扩容后出现部分队列无法被 ...

  7. 深入理解RocketMQ(四)--消息存储

    一.MQ存储分类 MQ存储主要分为以下三类: 文件系统:RocketMQ/Kafka/RabbitMQ 关系型数据库DB:ActiveMQ(默认采用的KahaDB做消息存储)可选用JDBC的方式来做消 ...

  8. rocketmq详解-[个人版]-第一章

    一.消息队列概述 1.1.消息队列由来 在运维场景中,我们经常会存在如下场景:一旦出现S1异常,C1将因为S1的影响而异常(C为客户端,s为服务端) 当然可以通过添加多个S的方式,实现高可用.但这样会 ...

  9. RocketMQ原理解析-Remoting

    Remoting2. 通信层底层传输协议 RocketMq服务器与客户端通过传递RemotingCommand来交互,通过NettyDecoder,对RemotingCommand进行协议的编码与解码 ...

随机推荐

  1. python web开发学习笔记一:javascript基础

    一.认识js: 能进入到软件所实习是我的最大的收获,也是我的荣幸,我相信努力付出一定能够换回收获. 项目最先开始的是接触到web前端的一些内容,我们需要利用flask搭建应该有的框架.我有一些pyth ...

  2. 编程开发之--java多线程学习总结(4)

    3.使用锁机制lock,unlock package com.lfy.ThreadsSynchronize; import java.util.concurrent.locks.Lock; impor ...

  3. [温故]图解java多线程设计模式(一)

    去年看完的<图解java多线程设计模式>,可惜当时没做笔记,导致后来忘了许多东西,打算再温习下这本书,顺便在这里记录一下~  1.顺序执行.并行.并发 顺序执行:多个操作按照顺序依次执行. ...

  4. 为什么要重写hashcode方法和equals方法

    我们可能经常听到说重写equals方法必须重写hashcode方法,这是为什么呢?java中所有的类都是Object的子类,直接上object源码 /* * Copyright (c) 1994, 2 ...

  5. eclipse左边的项目栏消失的处理方法

    window —–> Show View —–> other —–> package Explorer

  6. c# 获取项目根目录方法

    编写程序的时候,经常需要用的项目根目录.自己总结如下 1.取得控制台应用程序的根目录方法     方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 ...

  7. (转)OpenStack —— 原理架构介绍(一、二)

    原文:http://blog.51cto.com/wzlinux/1961337 http://blog.51cto.com/wzlinux/category18.html-------------O ...

  8. python安装及配置

     1.进入python官网https://www.python.org/2.导航栏选择Download -> Windows3.按照系统版本点击选择32.64位安装包64 Windows x86 ...

  9. JavaScript设计模式-9.工厂模式

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. 1-2 Mobx 入门实践之TodoList(官方Demo)

    第一步:导入模块 import React, { Component } from 'react'; import { observable, autorun,computed } from 'mob ...