RocketMQ发送异步顺序消息DEMO

Producer 

public class AddProducer {

    public static void main(String[] args) throws Exception {
        DefaultMQProducer producer = new DefaultMQProducer("a-group");
        producer.setNamesrvAddr("192.168.0.211:9876");
        producer.start();

        Alarm alarm1 = new Alarm(1, "add", new SimpleDateFormat("yyyy-MM-dd").parse("2024-01-01"));
        Alarm alarm2 = new Alarm(2, "add", new SimpleDateFormat("yyyy-MM-dd").parse("2024-01-02"));
        Alarm alarm3 = new Alarm(3, "add", new SimpleDateFormat("yyyy-MM-dd").parse("2024-01-03"));
        Alarm alarm4 = new Alarm(4, "add", new SimpleDateFormat("yyyy-MM-dd").parse("2024-01-04"));
        Alarm alarm5 = new Alarm(5, "add", new SimpleDateFormat("yyyy-MM-dd").parse("2024-01-05"));
        Alarm alarm6 = new Alarm(6, "add", new SimpleDateFormat("yyyy-MM-dd").parse("2024-01-06"));
        Alarm alarm7 = new Alarm(7, "add", new SimpleDateFormat("yyyy-MM-dd").parse("2024-01-07"));
        Alarm alarm8 = new Alarm(8, "add", new SimpleDateFormat("yyyy-MM-dd").parse("2024-01-08"));
        Alarm alarm9 = new Alarm(9, "add", new SimpleDateFormat("yyyy-MM-dd").parse("2024-01-09"));
        Alarm alarm10 = new Alarm(10, "add", new SimpleDateFormat("yyyy-MM-dd").parse("2024-01-10"));

        ArrayList<Alarm> list = new ArrayList<>();
        list.add(alarm1);
        list.add(alarm2);
        list.add(alarm3);
        list.add(alarm4);
        list.add(alarm5);
        list.add(alarm6);
        list.add(alarm7);
        list.add(alarm8);
        list.add(alarm9);
        list.add(alarm10);




        try {

            for (Alarm alarm : list) {
                Message msg = new Message("ALARM_RECORD", "add", alarm.toString().getBytes(RemotingHelper.DEFAULT_CHARSET));
                producer.send(msg,new CustomMessageQueueSelector(),alarm.getId(),new CustomSendCallback());
                System.out.println(alarm.getId() + " Continue execution ");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        // 6. 关闭生产者
//        producer.shutdown();
    }
}

消息筛选器

public class CustomMessageQueueSelector implements MessageQueueSelector {
    @Override
    public MessageQueue select(List<MessageQueue> list, Message message, Object o) {
        Integer id = (Integer) o;
        long index = id % list.size();
        return list.get((int) index);
    }
}

异步回调函数

@Slf4j
public class CustomSendCallback implements SendCallback {
    @Override
    public void onSuccess(SendResult sendResult) {
        log.info("Send message success, " + sendResult);
    }

    @Override
    public void onException(Throwable throwable) {
        log.error(throwable.getLocalizedMessage());
        //记录失败消息后续人工补偿 - 可插库
    }
}

非常明显了是异步的,主线程的信息都打印完了。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值