RocketMQ實現隨緣分BUG小功能示例詳解

正文

以前公司的產品已經上線20多年瞭,主要是維護,也就是改bug。每周我們Team會從Jira上拿我們可以改的bug,因為每個團隊負責的業務范圍不一樣,我們團隊隻能改我們自己業務范圍的。這樣每周大概有20個左右的新bug,假如團隊一共10個人,那麼均分就是每人兩個,改完下班。

但是這BUG肯定有難有簡單,大傢肯定都願意改簡單的,在傢辦公,任務量完瞭不就等於放假麼。開始是自己給自己搶,就忒卷,是歐美項目,所以客服晚上報出來的bug多。有的哥們早上5點起來看有沒有新的簡單的。

這對那些反應慢的兄弟不公平。領導分的話,就是能者多勞瞭,累的累死,閑的閑死。所以我們就需要一個隨機的分bug小工具,正所謂聽天由命,富貴在天。

實現過程

首先來n個消費者,n就是需要分的人數。

這裡需要將這些消費者全部放入同一個group,這樣這些bug會均分給這些消費者,而且當某個同事請假沒有來的時候,那麼就不啟動自己的消費者,這樣就是其他小夥伴均分。

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.setPullBatchSize(1);
        consumer.setMessageModel(MessageModel.CLUSTERING);
        //訂閱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");
    }
}

上邊的程序啟動N個就行

生產者:

public class RocketMQProducer {
    public static void main(String[] args) throws Exception {
        //實例化消息生產者對象
        DefaultMQProducer producer = new DefaultMQProducer("group_luke");
        //設置消息過期時間
        producer.setSendMsgTimeout(300000);
        //設置NameSever地址
        producer.setNamesrvAddr("127.0.0.1:9876");
        //啟動Producer實例
        producer.start();
        List<String> messages = new ArrayList<>();
        messages.add("WFD-11356");//添加bug號
        messages.add("WFD-11357");//添加bug號
        messages.add("WFD-11358");//添加bug號
        for (String message : messages) {
            //創建消息 指定topic和消息體
            Message msg = new Message("topic_luke", "tag", message.getBytes(StandardCharsets.UTF_8));
            System.out.println(msg.toString());
            //發送消息
            producer.sendOneway(msg);
        }
        //關閉producer
        producer.shutdown();
    }

當生產者啟動,將消息發送到RocketMQ的時候,各個消費者將收到消息,這也就決定瞭這周改哪個bug。

過程很粗制濫造,一個簡單的思路,就是說RocketMQ可以實現沒有人為幹預的均分。當需要均分某些東西的時候,可以使用這個思路。

以上就是RocketMQ實現隨緣分BUG小功能示例詳解的詳細內容,更多關於RocketMQ隨緣分BUG的資料請關註WalkonNet其它相關文章!

推薦閱讀: