关于怎么搭建RockerMQ先不讲
首先生产者
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
application.properties
rocketmq.producer.group=CMS
rocketmq.name-server=172.20.5.2:9876;
Controller
public class BookController {
@Autowired
private RocketMQTemplate template;
@GetMapping("/books")
public ModelAndView books(){
List<Book> books = new ArrayList<>();
//至于为什么用这个MessageBuilder 完全是为了与消费者对应 消费者也用的Message(MessageExt)类型 只不过这个有时间戳
//或者得到重试次数 以及许多参数当然你也可以直接写String 生产者重试次数是两次 有三种方式发送 同步 异步 和 one way
//前两种都有返回结果SendResult 下面代码默认是同步 他也有SendResult 只不过藏在代码里 下面的topic:tag 是有讲究的在可视化界面
//直观的看到了
template.convertAndSend("topic:tag", MessageBuilder.withPayload("111111111111111111").build());
消费者
package com.example.demo;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;
import java.io.UnsupportedEncodingException;
@Component
//topic selectExpression对应生产者的 consumerGroup随便写
@RocketMQMessageListener(topic = "topic",selectorExpression = "tag",consumerGroup = "listener1")
public class MessageListener1 implements RocketMQListener<MessageExt> {
@Override
public void onMessage(MessageExt messageExt) {
try {
//消费者发生异常或重试 默认是重试16次有一定时间间隔 1s 2S 5s 10s 30S 1min
int i= 0;
i =i/0;
String messageStr = new String(messageExt.getBody(), "UTF-8");
System.out.println("我是listener1"+messageStr);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
这个下面有消费者 not online 我们忽略掉就好 我们只需要关注 not yet consume 和consume 两种状态
另外RocketMq 有两种消费模式 默认是集群 比如你发了二十条消息 有两个一模一样的消费者
consumerGroup = "listener1"必须一样(不一样就和广播效果一样当做两个消费者处理) 然后两个平分二十条 至于广播就一人消费20条