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());
//记录失败消息后续人工补偿 - 可插库
}
}
非常明显了是异步的,主线程的信息都打印完了。