SpringBoot整合RockeyMQ

    1:添加依赖,安装的什么版本就添加什么版本的依赖包,不然要手动创建topic

<!--RockeyMQ-->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.4.0</version>
</dependency>

2:编写生产者案例

@Component
public class PayProduct {

private DefaultMQProducer defaultMQProducer;

public DefaultMQProducer getProducer() {
return this.defaultMQProducer;
}

public PayProduct() {
//设置生产者组名称
defaultMQProducer = new DefaultMQProducer(JmsConfig.productGroup);

//设置连接地址
defaultMQProducer.setNamesrvAddr(JmsConfig.nameServerAddr);
strat();
}

//开启服务,只在启动一次
private void strat() {
try {
this.defaultMQProducer.start();
} catch (MQClientException e) {
e.printStackTrace();
}
}

//关闭服务 一般在上下文关闭
public void shutdown() {
defaultMQProducer.shutdown();
}

}

2:编写消费者案例
@Component
public class PayConsumerMasser {

private DefaultMQPushConsumer defaultMQPushConsumer;

public PayConsumerMasser() {
//消费组
defaultMQPushConsumer = new DefaultMQPushConsumer(JmsConfig.consumerGroup);
//外网连接地址
defaultMQPushConsumer.setNamesrvAddr(JmsConfig.nameServerAddr);
//设置从哪里开始消费
defaultMQPushConsumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);

try {
//接收topic
defaultMQPushConsumer.subscribe(JmsConfig.messageTop, JmsConfig.messageTogs);
} catch (MQClientException e) {
e.printStackTrace();
}
defaultMQPushConsumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
MessageExt messageExt = list.get(0);
int reconsumeTimes = messageExt.getReconsumeTimes(); //重试次数
try {
System.out.println("重试次数" + reconsumeTimes);

String body = new String(messageExt.getBody(), "utf-8");

Map<String, Object> map = JSON.parseObject(body, Map.class);
String context = (String) map.get("context"); //消息内容
String mobile = (String) map.get("mobile"); //手机号码
SmsUtil.getSmsEval(mobile, context,1);
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
} catch (Exception e) {
//发送失败,不進行重試
if (reconsumeTimes > 0) {
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
e.printStackTrace();
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
}
}
});
try {
defaultMQPushConsumer.start();
} catch (MQClientException e) {
e.printStackTrace();
}


}
}

问题 1:
org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException:
sendDefaultImpl call timeout

原因是阿里云存在多个网卡,rockeyMQ会根据当前的网卡选择一个ip使用,当机器有多个网卡的时候,就会出现这个问题,一个是公网ip,一个是私网ip,这要配置briker.conf
配置指定的公网ip,然后进行重启vroker.conf

conf/broker.conf 新增一个配置 brokerIP1=公网ip

已配置文件方式启动
nohup sh bin/mqbroker -n localhost:9876 -c ./conf/broker.conf &

 

posted on 2020-03-30 16:03  散漫的烟灰  阅读(186)  评论(0编辑  收藏  举报