简单使用rocketmq收发消息

199 阅读1分钟

1.构建一个maven项目

 <!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-client -->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.8.0</version>
        </dependency>

2.编写一个简单的发送方:

public class Producer {
    public static void main(String[] args) throws Exception{
        DefaultMQProducer producer = new DefaultMQProducer("xxogp");
        //设置nameserver地址
        producer.setNamesrvAddr("localhost:9876");
        producer.start();

        //topic 消息将要发送到的地址
        //body 消息中的具体数据
        Message message = new Message("mytop111", "你好".getBytes());
        SendResult send = producer.send(message);
        System.out.println("send = " + send);

        //发生多条消息
        //topic地址一样
        List<Message> messageList = new ArrayList<Message>();
        Message message1 = new Message("mytop111", "你好1".getBytes());
        Message message2 = new Message("mytop111", "你好2".getBytes());
        Message message3 = new Message("mytop111", "你好3".getBytes());
        messageList.add(message1);
        messageList.add(message2);
        messageList.add(message3);
        producer.send(messageList);

        System.out.println("发送完毕...");

        producer.shutdown();
    }
}

3.编写一个消息消费方

public class Consumer {
    public static void main(String[] args) throws Exception{
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("xxogp");
        consumer.setNamesrvAddr("localhost:9876");

        //每个consumer关注一个topic
        //topic 关注的消息的地址
        //过滤器 * 表示不过滤
        consumer.subscribe("mytop111","*");

        consumer.registerMessageListener(new MessageListenerConcurrently() {
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
                for (MessageExt msg : msgs) {
                    byte[] body = msg.getBody();
                    System.out.println(new String(body));
                }
                //默认情况下,这条消息只会被一个consumer消费 点对点
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });

        consumer.start();
        System.out.println("start....");
    }
}

4.消息发送和消息接收的小案例就实现了