创建项目
笔者使用的是idea开发工具。首先创建新的项目,然后选中Spring Initilizr,输入项目名称,选择Maven项目,设置自己的GroupName等,并选择自己的JDK版本。
引入SpringWeb和Lombok两个依赖即可,然后点击create按钮创建项目
添加依赖
在pom文件中,引入RocketMQ相关依赖,笔者使用的是RocketMQ5.x版本,所以引入的版本是5.0。
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>5.0.0</version>
</dependency>
生产者
模拟推送消息
创建一个Producer类,模拟循环推送信息,具体内容如下:
public class Producer {
public static void main(String[] args) throws MQClientException, InterruptedException {
//1.创建消息生产者producer,并指定生产者组名
DefaultMQProducer producer = new DefaultMQProducer("DEFAULT_PRODUCER_GROUP");
//2.指定Nameserver地址,也可以通过环境变量配置
producer.setNamesrvAddr("127.0.0.1:9876");
//3.启动producer
producer.start();
for (int i = 0; i < 5; i++)
try {
{
//4.创建消息对象,指定主题Topic、Tag和消息体
Message msg = new Message(RocketMQConstant.DEMO_TOPIC,
"",
"",
String.format("%s %s", "Hello World : Demo Topic ", i).getBytes(RemotingHelper.DEFAULT_CHARSET));
//5.发送消息
//同步发送
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
//单向发送,这个方法没有返回值。
producer.sendOneway(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
//6.关闭生产者producer
producer.shutdown();
}
}
执行当前方法,会推送消息。
消费者
模拟消费
创建ConsumerConfig,具体内容如下:
@Configuration
@Slf4j
public class ConsumerConfig {
@Bean
public MQConsumer mqConsumer(){
DefaultMQPushConsumer defaultMQPushConsumer = new DefaultMQPushConsumer("broker-a");
try{
defaultMQPushConsumer.setNamesrvAddr("127.0.0.1:9876");
defaultMQPushConsumer.subscribe(RocketMQConstant.DEMO_TOPIC, "*");
defaultMQPushConsumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
for(MessageExt msg : list){
log.debug("Receive Message :{} --> {}", msg.getMsgId(), new String(msg.getBody()));
}
return null;
}
});
defaultMQPushConsumer.start();
log.info("mqConsumer init success");
}catch(Exception e){
log.error("mqConsumer init error",e);
}
return defaultMQPushConsumer;
}
}
启动项目,会接收到刚才推送的消息。
这样,最基本的简单的推送消息和接收消息就实现了。