Springboot整合RocketMQ(一)

Springboot整合RocketMQ(一)

由于项目上需要用到RocketMQ来做消息同步。本文主要记录自己RocketMQ的学习历程。也将自己的经验分享给大家。
本文测试时,博主已经将RocketMQ安装到了虚拟机上,并且配置了RocketMq-console-ng.

发送同步消息

- 项目POM文件

	<dependency>
			<groupId>org.apache.rocketmq</groupId>
			<artifactId>rocketmq-client</artifactId>
			<version>4.6.1</version>
		</dependency>

- Producer(生产者)

public class Producer {

	public static void main(String[] args)throws Exception {
		DefaultMQProducer producer = new DefaultMQProducer("xoxogp");
		//设置nameserver
		producer.setNamesrvAddr("192.168.37.128:9876");
		producer.start();//启动
		
		// topic 消息将要发送的地址
		// body  消息中的内容
		Message msg1 = new Message("myTopic001", "这个是第一条消息".getBytes());
		Message msg2 = new Message("myTopic001", "这个是第二条消息".getBytes());
		Message msg3 = new Message("myTopic001", "这个是第三条消息".getBytes());

		ArrayList<Message> list = new ArrayList<Message>();
		list.add(msg1);
		list.add(msg2);
		list.add(msg3);
      //同步消息发送
		SendResult sendResult = producer.send(list);
		
		System.out.println(sendResult);

	}
}

- Consumer (消费者)

public class Consumer {

    public static void main(String[] args) throws Exception {
        //消费组
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("xxoocsm");
        consumer.setNamesrvAddr("192.168.37.128:9876");
        //topic 消息地址
        // subExpression 过滤器 * 表示不过滤
        consumer.subscribe("myTopic001", "*");
       //监听消息
        consumer.registerMessageListener(new MessageListenerConcurrently() {
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
                for (MessageExt msg : msgs) {
                    System.out.println(new String(msg.getBody()));
                }
                //返回消费状态
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
        consumer.start();
        System.out.println("Consumer 02 start...");
    }
}

- 运行示例

  • Producer(生产者)
    生产者运行
  • Consumer (消费者)
    消费者运行

发送异步消息

想要快速发送消息,又不想丢失的时候可以使用异步消息

  • Producer(生产者)
public class Producer2 {

	public static void main(String[] args)throws Exception {
		
		DefaultMQProducer producer = new DefaultMQProducer("xoxogp");
		//nameserver
		producer.setNamesrvAddr("192.168.37.128:9876");
		producer.start();

		Message message = new Message("myTopic001", "xxoo".getBytes());
	//	producer.setRetryTimesWhenSendAsyncFailed(retryTimesWhenSendAsyncFailed);
		//消息异步发送
		producer.send(message,new SendCallback() {
			//发送成功的处理逻辑
			public void onSuccess(SendResult sendResult) {
				System.out.println("消息发送成功");
				System.out.println("sendResult :" + sendResult);
			}
			//发送异常的处理逻辑
			public void onException(Throwable e) {
				e.printStackTrace();
				System.out.println("发送异常");
			}
		});
	}
}

消费者同上。

注意

  • 批量消息要求必要具有同一topic、相同消息配置
  • 不支持延时消息
  • 建议一个批量消息最好不要超过1MB大小
  • 如果不确定是否超过限制,可以手动计算大小分批发送
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章