最近学习使用 rocketmq,需要搭建 rocketmq 服务端,本文主要记录 rocketmq 搭建过程以及Springboot整合过程踩到的一些坑。
在搭建之前,我们需要做一些准备工作,这里我们需要使用 docker搭建服务,所以需要提前安装docker。此外,由于 rocketmq 需要部署 broker 与 nameserver ,考虑到分开部署比较麻烦,这里将会使用 docker-compose。
docker教程:https://www.runoob.com/docker/docker-tutorial.html
2.部署过程首先我们需要 rocketmq docker 镜像,这里我们直接采用foxiswho
提供的docker-rocketmq镜像,git地址:https://github.com/foxiswho/docker-rocketmq
git clone https://github.com/foxiswho/docker-rocketmq.git cd docker-rocketmq cd rmq chmod +x start.sh ./start.sh
启动之后的文件目录
访问浏览器
localhost:8180
注意 如果你的微服务或者项目在开发的时候没有放入docker中或者与rocketmq容器不能直接用IP访问, 那么请把broker.conf中的 #brokerIP1=192.168.0.253 前面#号去掉,并且把后面的IP地址改成你的rocketmq容器宿主机IP地址, 否则报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to ip:10911 failed 配置文件 在 rmq/rmq/brokerconf 目录下
控制台启动成功
4.0.0 org.springframework.boot spring-boot-starter-parent 2.6.3 com.bloom rocketmq-consumer 0.0.1-SNAPSHOT rocketmq-consumer Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.apache.rocketmq rocketmq-spring-boot-starter 2.1.1 org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok
server:
port: 8096
spring:
application:
name: rocketmq-consumer
rocketmq:
name-server: 127.0.0.1:9876 # rocketMQ的名称服务器,格式为:' host:port;host:port '。
# 生产端配置
producer:
group: ${spring.application.name} # 生产着组名
#access-key: access-key # rocketMQ服务端配置acl授权信息,没有则不需要
#secret-key: secret-key # rocketMQ服务端配置acl授权信息,没有则不需要
# 消费端配置
# consumer:
# access-key: access-key #如果开启了acl,一定要配置。否则集群模式下会正常,广播模式消费端会失效!
# secret-key: secret-key #如果开启了acl,一定要配置。否则集群模式下会正常,广播模式消费端会失效!
@Slf4j
@Component
@RocketMQMessageListener(topic = "simple", //主题
consumerGroup = "simple-consumer-group"//消费组
)
public class SimpleConsumer implements RocketMQListener {
@Override
public void onMessage(String s) {
System.out.println("消费者======" + s);
}
}
消息生产者
4.0.0 org.springframework.boot spring-boot-starter-parent 2.6.3 com.bloom producer 0.0.1-SNAPSHOT producer Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.apache.rocketmq rocketmq-spring-boot-starter 2.1.1 junit junit 4.13.2 test org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok
server:
port: 8093
spring:
application:
name: rocketmq-producer
rocketmq:
name-server: 127.0.0.1:9876 # rocketMQ的名称服务器,格式为:' host:port;host:port '。
# 生产端配置
producer:
group: ${spring.application.name} # 生产着组名
#access-key: access-key # rocketMQ服务端配置acl授权信息,没有则不需要
#secret-key: secret-key # rocketMQ服务端配置acl授权信息,没有则不需要
# 消费端配置
# consumer:
# access-key: access-key #如果开启了acl,一定要配置。否则集群模式下会正常,广播模式消费端会失效!
# secret-key: secret-key #如果开启了acl,一定要配置。否则集群模式下会正常,广播模式消费端会失效!
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
class ProducerApplicationTests {
@Resource
private RocketMQTemplate rocketMQTemplate;
@Test
public void sendMessage() {
String key = "simple";
for (int i = 0; i < 1; i++) {
String message = "发送同步消息1,msg=" + i;
SendResult sendResult = this.rocketMQTemplate.syncSend(key, message,100000);
log.info("MQ发送同步消息成功,key={} msg={},sendResult={}", key, message, sendResult);
}
}
}
执行结果



