RocketMq(2)-发送有序的消息

在上一个博文中,我们简单的介绍了以下RockMq,以及如何实现一个无序的消息,还写出了如何处理消息失败重试的机制·

开始

搭建一个消息的顺序消费
搭建一个生产者
DefaultMQProducer queueProducer=new DefaultMQProducer("queueGroup");
    queueProducer.setNamesrvAddr("47.106.132.60:9876");
    queueProducer.setRetryTimesWhenSendFailed(5);
    queueProducer.setRetryAnotherBrokerWhenNotStoreOK(true);
    queueProducer.setDefaultTopicQueueNums(5);
    queueProducer.start();
    for (int i=1;i<=10;i++){
        for (int j=0;j<3;j++){
            Message message=new Message("queueTopic","queueTag","key:"+i,(i+":"+j).getBytes());
            queueProducer.send(message, new MessageQueueSelector() {
                public MessageQueue select(List<MessageQueue> list, Message message, Object o) {
                //o的值就是send传参的第三个参数的值,messgaeQueue主要是该组中有多少个队列。
                    Integer id= (Integer) o;
                    System.out.println(id);
                    return list.get(id%list.size());
                }
            },i);
        }
    }
    queueProducer.shutdown();
搭建一个消费者
DefaultMQPushConsumer consumer=new DefaultMQPushConsumer("queueConsumer");
    consumer.setNamesrvAddr("47.106.132.60:9876");
    consumer.setMessageModel(MessageModel.CLUSTERING);
    consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
    consumer.subscribe("queueTopic","*");
    consumer.registerMessageListener(new MessageListenerOrderly() {
        public ConsumeOrderlyStatus consumeMessage(List<MessageExt> list, ConsumeOrderlyContext consumeOrderlyContext) {
            for (MessageExt ext:list){
                System.out.println(new String(ext.getBody()));
            }
            return ConsumeOrderlyStatus.SUCCESS;
        }
    });
    consumer.start();

消息的顺序消费分为局部或者全局的顺序。而局部的消费就采用上面的方式,然后全局的顺序消费则是指定一个队列来消费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值