IDEA中模擬收發消息

創建一個Maven項目

添加依賴,添加producer類和consumer類

添加Maven依賴

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <rocketmq.version>4.3.0</rocketmq.version>
</properties
<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.25</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.rocketmq</groupId>
        <artifactId>rocketmq-client</artifactId>
        <version>${rocketmq.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.rocketmq</groupId>
        <artifactId>rocketmq-common</artifactId>
        <version>${rocketmq.version}</version>
    </dependency>

</dependencies>

運行productor

import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

import java.util.Date;


/**
 * Created by yl1794 on 2018/5/30.
 */
public class Producer {
    public static void main(String[] args) throws MQClientException {
        DefaultMQProducer producer = new DefaultMQProducer("rmq-group");
        producer.setCreateTopicKey("AUTO_CREATE_TOPIC_KEY");
        // 多個地址之間用;分隔
        producer.setNamesrvAddr("192.168.6.103:9876");
        producer.setInstanceName("rmq-instance");
        producer.start();
        try {
            // TopicA-test TagA
            for (int i = 0; i < 3; i++) {
                Message msg = new Message("TopicA-test",// topic
                        "TagA",// tag
                        (new Date() + "Hello RocketMQ ,TopicA-test,TagA " + i)
                                .getBytes()// body
                );
                SendResult sendResult = producer.send(msg);
                System.out.println(sendResult);
            }

            // TopicA-test TagB
            for (int i = 0; i < 3; i++) {
                Message msg = new Message("TopicA-test",// topic
                        "TagB",// tag
                        (new Date() + "Hello RocketMQ ,TopicA-test,TagB " + i)
                                .getBytes()// body
                );
                SendResult sendResult = producer.send(msg);
                System.out.println(sendResult);
            }

            // TopicC-test TagC
            for (int i = 0; i < 3; i++) {
                Message msg = new Message("TopicC-test",// topic
                        "TagC",// tag
                        (new Date() + "Hello RocketMQ ,TopicC-test,TagC " + i)
                                .getBytes()// body
                );
                SendResult sendResult = producer.send(msg);
                System.out.println(sendResult);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        producer.shutdown();
    }
}

運行consummer

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;

import java.util.List;


public class Consumer {
    public static void main(String[] args) throws MQClientException {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("rmq-group");

        consumer.setNamesrvAddr("192.168.6.103:9876");
        consumer.setInstanceName("rmq-instance");


        // 設置的是一個consumer的消費策略
        // CONSUME_FROM_LAST_OFFSET 默認策略,從該隊列最尾開始消費,即跳過歷史消息
        // CONSUME_FROM_FIRST_OFFSET 從隊列最開始開始消費,即歷史消息(還儲存在broker的)全部消費一遍
        // CONSUME_FROM_TIMESTAMP 從某個時間點開始消費,和setConsumeTimestamp()配合使用,默認是半個小時以前
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);

        // 設置consumer所訂閱的Topic和Tag,*代表全部的Tag


        consumer.subscribe("TopicA-test", "TagA || TagB");
        consumer.subscribe("TopicC-test","*");

        consumer.registerMessageListener(new MessageListenerConcurrently() {

            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
                for (MessageExt msg : msgs) {
                    if(msg.getTopic().equals("TopicA-test")){
                        if(msg.getTags().equals("TagA")){
                            System.out.println("TopicA: " + "TagA: " + new String(msg.getBody()));
                        }else if(msg.getTags().equals("TagB")){
                            System.out.println("TopicA: " + "TagB: " + new String(msg.getBody()));
                        }
                    }else if (msg.getTopic().equals("TopicC-test")) {
                        System.out.println("TopicC: " + new String(msg.getBody()));
                    }
                }

                // 返回消費狀態
                // CONSUME_SUCCESS 消費成功
                // RECONSUME_LATER 消費失敗,需要稍後重新消費

                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
        consumer.start();
        System.out.println("Consumer Started.");
    }
}

踩過的坑:

rocketMq版本和服務器不一致

參考文章:

https://blog.csdn.net/mr_evanchen/article/details/80584886

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章