RocketMQ Order序列demo--李波RocketMQ学习

//namesrv启动
start mqnamesrv.cmd
//broker启动
start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
//运行consumer java application
//运行provider java application
注:可以写两个consumer,都先启动起来(先订阅),然后生产者发送消息。你会发现,消息是按照队列有序输出的。
maven工程导包(最基本的demo只需要这4个包就可以)

<!-- RocketMQ -->
        <dependency>  
             <groupId>org.apache.rocketmq</groupId>  
             <artifactId>rocketmq-all</artifactId>  
             <version>4.2.0</version>  
             <type>pom</type>  
        </dependency>
        <dependency>  
             <groupId>org.apache.rocketmq</groupId>  
             <artifactId>rocketmq-client</artifactId>  
             <version>4.2.0</version>  
        </dependency>  

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.1.1</version>
        </dependency>
  </dependencies>

生产者

package exercise1.order;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.MessageQueueSelector;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageQueue;
import org.apache.rocketmq.remoting.exception.RemotingException;
public class Producer {
    public static void main(String[] args) throws MQClientException, UnsupportedEncodingException, RemotingException, MQBrokerException, InterruptedException {
        //01new 一个默认的消息生产者
        DefaultMQProducer producer = new DefaultMQProducer("ordertest");
        //02注册
        producer.setNamesrvAddr("localhost:9876");
        //03开启
        producer.start();
        //04准备一份消息
        for(int i=0;i<=15;i++) {
            Message msg = new Message("order","tag",("order"+i).getBytes("utf-8"));
            //05发送
            //有序消息是在发送的时候增加一个消息队列选择器
            SendResult sr = producer.send(msg,new MessageQueueSelector() {
                public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
                    Integer id = (Integer)arg;
                    return mqs.get(id);
                }
            },0);
            System.out.println(sr);
        }
        for(int i=0;i<=15;i++) {
            Message msg = new Message("order","tag",("order8: "+i).getBytes("utf-8"));
            //05发送
            //有序消息是在发送的时候增加一个消息队列选择器
            SendResult sr = producer.send(msg,new MessageQueueSelector() {
                public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
                    Integer id = (Integer)arg;
                    return mqs.get(id);
                }
            },1);
            System.out.println(sr);
        }
        for(int i=0;i<=15;i++) {
            Message msg = new Message("order","tag",("order4: "+i).getBytes("utf-8"));
            //05发送
            //有序消息是在发送的时候增加一个消息队列选择器
            SendResult sr = producer.send(msg,new MessageQueueSelector() {
                public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
                    Integer id = (Integer)arg;
                    return mqs.get(id);
                }
            },3);
            System.out.println(sr);
        }
        //06关闭
        producer.shutdown();
    }
}

消费者

package exercise1.order;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeOrderlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeOrderlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerOrderly;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;

public class Consumer {
    public static void main(String[] args) throws MQClientException {
        //01 new 默认的消息消费者
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("orderconsumer");
        //02注册
        consumer.setNamesrvAddr("localhost:9876");
        //03设置获取原则
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
        //04订阅
        consumer.subscribe("order","*");
        //05注册监听器
        consumer.registerMessageListener(new MessageListenerOrderly() {

            public ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs, ConsumeOrderlyContext context) {
                //设置自动提交
                context.setAutoCommit(true);
                try {
                    System.out.println(new String(msgs.get(0).getBody(),"utf-8"));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                return ConsumeOrderlyStatus.SUCCESS;
            }
        });
        //06启动
        consumer.start();
        System.out.println("接收者启动了");
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_38537747/article/details/82111356