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

 

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