前言
本文旨在教初学 SpringCloudAlibaba 组件之 RocketMq 的同学快速上手。
工具:IDEA+MAVEN
组件依赖
springboot-parent
<!-- springboot-parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- springcloudalibaba -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- rocketmq -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
</dependency>
配置文件
spring:
cloud:
stream:
rocketmq:
binder:
name-server: localhost:9876
bindings:
producer-out-0:
producer:
group: output_1
bindings:
producer-out-0:
destination: broadcast
DEMO
package com.harvei.liepan.common.mq;
import com.harvei.liepan.common.mq.bean.SimpleMsg;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageConst;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.GenericMessage;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Configuration
public class MyRocketmq {
@Autowired
private RocketMQTemplate rocketMQTemplate;
@Bean
public ApplicationRunner
producer() {
return args -> {
for (int i = 100; i < 105; i++) {
String key = "KEY" + i;
Map<String, Object> headers = new HashMap<>();
headers.put(MessageConst.PROPERTY_KEYS, key);
headers.put(MessageConst.PROPERTY_ORIGIN_MESSAGE_ID, i);
Message<SimpleMsg> msg = new GenericMessage<SimpleMsg>(new SimpleMsg("Hello RocketMQ " + i));
rocketMQTemplate.send("broadcast",msg);
log.info("生产端发送消息:msg={}", msg);
}
};
}
@Bean
public MyConsumer myConsumer(){
return new MyConsumer();
}
@RocketMQMessageListener(topic = "broadcast",consumerGroup = "broadcast-consumer")
public class MyConsumer implements RocketMQListener<MessageExt> {
@Override
public void onMessage(MessageExt messageExt) {
byte[] body = messageExt.getBody();
String msg = new String(body);
log.info("消费端监听到消息:msg={}", msg);
}
}
}
启动项目,可以在控制台上看到打印到的消息日志: