写在最前
Spring Boot 整合 RocketMQ
Demo 地址:mingyue-springboot-rocketmq
1.添加依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
2.修改配置文件
rocketmq:
nameServer: 127.0.0.1:9876
producer:
group: mingyue-springboot
3.编写生产者
import lombok.RequiredArgsConstructor;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.stereotype.Service;
/**
* 生产者
*
* @author Strive
* @date 2022/4/24 17:07
* @description
*/
@RequiredArgsConstructor
@Service
public class ProducerService {
private final RocketMQTemplate rocketMQTemplate;
/**
* 发送消息
*
* @param message 消息体
*/
public void send(String message) {
/** 指定发送 mingyue-topic */
rocketMQTemplate.convertAndSend("mingyue-topic", message);
}
}
4.编写消费者
/**
* 消费者
*
* @author Strive
*/
@Slf4j
@RocketMQMessageListener(topic = "mingyue-topic", consumerGroup = "mingyue-consumer-group")
@Component
public class ConsumerListener implements RocketMQListener<String> {
@Override
public void onMessage(String s) {
log.info("接受到【mingyue-topic】信息:{}", s);
}
}
5.编写接口
import com.csp.mingyue.rocketmq.service.ProducerService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 生产消息,消费消息
*
* @author Strive
* @date 2022/4/24 17:12
* @description
*/
@RestController
@RequestMapping("/producer")
@RequiredArgsConstructor
public class ProducerController {
private final ProducerService producerService;
@GetMapping("/send")
public String send(String msg) {
producerService.send(msg);
return "success";
}
}
启动项目,测试接口
http://localhost:8080/producer/send?msg=SpringBoot整合RocketMQ消息队列
2022-04-24 20:23:12.054 INFO 8740 --- [MessageThread_1] c.c.m.r.listener.ConsumerListener : 接受到【mingyue-topic】信息:SpringBoot整合RocketMQ消息队列
6.查看控制台
访问 RocketMq 控制台:127.0.0.1:8080
-
生产者
-
消费者
小结
MQ 的水可太深了,但你用了 MQ 之后,除非你的消息不重要,不然你就要考虑如何解决如下问题:
- 消息去重:如何业务端逻辑保持幂等性;
- 消息重复:如何避免消息重复产生或重复消费;
- 消息的可用性:如何在集群模式下保证消息的存储和复制;
- 。。。
后续文章会把这些挖的坑填上~~~