RocketMQ消息队列实现随机消息发送当做七夕礼物

2022-10-07,,,,

正文

都在过情人节,前端的小哥哥们给女朋友画个页面,美美的,写个chrome插件,好看的,俺们后端程序员咋办。

我给媳妇写首诗,哈哈

我决定,把想对媳妇说的,今天发送到一个mq里边,然后在七夕当天,打开消费者,将这一段话给俺媳妇看。你看,这就是我好久前对你说的话,这就是我们后端程序员的浪漫。当然也可以多发送几个,到时候跟根据topic控制到底发什么,哈哈。

这里首先得用顺序消息,当然,消息过期时间得设置的长一点。

1 下载并启动rocketmq

,这是个windows版本的。

下载完成解压后长这样:

然后后还需要配置环境变量

这个时候就可以进入到rocketmq的bin目录启动mq了

1.1 首先启动name server

start mqnamesrv.cmd

1.2 然后启动broker

start mqbroker.cmd -n 127.0.0.1:9876 autocreatetopicenable=true

这个时候就启动成功了

2 生产者

需要注意的是,消息必须是顺序消息,不然发送的消息顺序就乱了。一首情诗顺序乱了,读不下去,岂不是很尴尬。

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 java.util.list;
public class rocketmqorderproducer {
    public static void main(string[] args) throws exception {
        defaultmqproducer producer = new defaultmqproducer("please_rename_unique_group_name");
        producer.setnamesrvaddr("127.0.0.1:9876");
        producer.start();
        string[] tags = new string[]{"taga", "tagc", "tagd"};
        //读取文件
        list<string> messages = getmessages();
        for (int i = 0; i < messages.size(); i++) {
            string body = messages.get(i);
            message msg = new message("topic_luke", tags[i % tags.length], "key" + i, body.getbytes());
            sendresult sendresult = producer.send(msg, new messagequeueselector() {
                @override
                public messagequeue select(list<messagequeue> mqs, message msg, object arg) {
                    long id = ((integer)arg).longvalue();
                    long index = id % mqs.size();
                    return mqs.get((int) index);
                }
            }, i);
        }
        producer.shutdown();
    }
    static list<string> getmessages() throws ioexception {
        string temp = null;
        file f = new file("e:\code\online-taxi-three\demo\luke.txt");
        inputstreamreader read = new inputstreamreader(new fileinputstream(f));
        arraylist readlist = new arraylist();
        bufferedreader reader = new bufferedreader(read);
        while ((temp = reader.readline()) != null && !"".equals(temp)) {
            readlist.add(temp);
        }
        return readlist;
    }
}

3 消费者

这里需要注意的是setconsumethreadmaxsetconsumethreadmin都需要设置成1,单线程取消息这样就可以通过sleep控制消息的显示速度,不然并发取消息就很快显示完了。不够唯美。

import lombok.sneakythrows;
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.common.message.messageext;
import java.util.list;
import java.util.concurrent.timeunit;
public class rockermqconsumer {
    public static void main(string[] args) throws exception {
        //实例化消息消费者
        defaultmqpushconsumer consumer = new defaultmqpushconsumer("group_luke");
        //指定nameserver地址
        consumer.setnamesrvaddr("127.0.0.1:9876");
        consumer.setconsumethreadmax(1);
        consumer.setconsumethreadmin(1);
        consumer.setpullbatchsize(1);
        //订阅topic
        consumer.subscribe("topic_luke","*");
        // 注册回调实现类来处理从broker拉取回来的消息
        consumer.registermessagelistener(new messagelistenerconcurrently() {
            @sneakythrows
            @override
            public consumeconcurrentlystatus consumemessage(list<messageext> msgs, consumeconcurrentlycontext context) {
                for (messageext msg : msgs) {
                    system.out.println(new string(msg.getbody()));
                    timeunit.seconds.sleep(3);
                }
                // 标记该消息已经被成功消费
                return consumeconcurrentlystatus.consume_success;
            }
        });
        // 启动消费者实例
        consumer.start();
        system.out.printf("consumer started.%n");
    }
}

发送的内容在这里自由编写哈,路径和文件名能对上就行,谢谢观看,最近突发奇想,把技术编成故事讲出来,会不会比较受欢迎呢。

以上就是rocketmq消息队列实现随机消息发送当做七夕礼物的详细内容,更多关于rocketmq消息队列随机消息的资料请关注其它相关文章!

《RocketMQ消息队列实现随机消息发送当做七夕礼物.doc》

下载本文的Word格式文档,以方便收藏与打印。