rocketmq 官方文档:http://rocketmq.apache.org/docs/order-example/
nameServer:mq服务安装地址 ip:端口(一般9876)
通过 group, topic来订阅 谁的消息,tag区分谁的消息是哪一条,key 区分消息内容;
rocketmq 生产者:
通过 group, topic来订阅 谁的消息,tag区分谁的消息是哪一条,key 区分消息内容;消息体最大默认4M
mqProducer.send(message)、
mqProducer.send(message1, new SendCallback() {
// @Override
// //成功的回调函数
// public void onSuccess(SendResult sendResult) {
// System.out.println(sendResult.getSendStatus());
// System.out.println("成功了");
// }
// @Override
// //出现异常的回调函数
// public void onException(Throwable e) {
// System.out.println("失败了"+e.getMessage());
// }
// });
//获取某个主题的消息队列
List<MessageQueue>
messageQueues
=
mqProducer
.fetchPublishMessageQueues(
"promotion-to-product"
);
消费者:1、串行:顺序消费,有失败的消息,会一直重试,时间可以配置,但是不会跳过,可以手动写代码判断,后续消息会一直等待;
consumer.setMessageListener(new MessageListenerOrderly(){
int a=0;
@Override
public ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs,ConsumeOrderlyContext context){
LOGGER.info("消费"+a++);
return ConsumeOrderlyStatus.SUCCESS;
}
});
int a=0;
@Override
public ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs,ConsumeOrderlyContext context){
LOGGER.info("消费"+a++);
return ConsumeOrderlyStatus.SUCCESS;
}
});
/2、并行,会跳过失败的消息:
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,ConsumeConcurrentlyContext context){
for (MessageExt messageExt : msgs){
LOGGER.info("Receive New Message:{},Map<msgId,times>:{}",messageExt.toString(),msgsMap);
handleMessage(messageExt);
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,ConsumeConcurrentlyContext context){
for (MessageExt messageExt : msgs){
LOGGER.info("Receive New Message:{},Map<msgId,times>:{}",messageExt.toString(),msgsMap);
handleMessage(messageExt);
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
消费者还可以配置:
广播和集群模式:广播模式:生产者发一条消息 所有订阅的消费者会得到相同的消息,集群:生产者发一条消息 所有订阅的消费者只有一个会得到消息
广播和集群模式:广播模式:生产者发一条消息 所有订阅的消费者会得到相同的消息,集群:生产者发一条消息 所有订阅的消费者只有一个会得到消息
坑:groupname各个服务之间不能共用, 收发消息只要topic对应就行,group决定borker里面queue的分配,不同服务共用一个group,不同topic时会导致消息争夺,丢失。
通过 group, topic来订阅 谁的消息,tag区分谁的消息是哪一条,key 区分消息内容;