发送同步消息
发送过后会有一个返回值,也就是mq服务器接收到消息后返回的一个确认,这种方式非常安全,但是性能上并没有这么高
@Test
void simpleProducer() throws MQClientException, MQBrokerException, RemotingException, InterruptedException {
//创建一个生产者,指定组名
DefaultMQProducer producer = new DefaultMQProducer("test-producer-group");
//连接namesrv
producer.setNamesrvAddr(MqConstant.NAME_SRV_ADDR);
//启动
producer.start();
//创建一个消息
Message message = new Message("testTopic", "hello world".getBytes());
//发送消息
SendResult send = producer.send(message);
System.out.println(send.getSendStatus());
//关闭生产者
producer.shutdown();
}
@Test
void simpleConsumer() throws Exception{
//创建一个消费者
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("test-consumer-group");
//连接
consumer.setNamesrvAddr(MqConstant.NAME_SRV_ADDR);
//订阅一个主题 *表示所有的消息,后期会有消息过滤
consumer.subscribe("testTopic", "*");
consumer.registerMessageListener((MessageListenerConcurrently) (list, consumeConcurrentlyContext) -> {
//业务处理
System.out.println("我是消费者");
System.out.println("消费:"+new String(list.get(0).getBody()));
System.out.println("消费上下文"+consumeConcurrentlyContext);
//返回值
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
});
//启动
consumer.start();
System.in.read();
}
发送异步消息
使用场景:对响应时间敏感的服务,即发送端不能容忍长时间地等待Broker的响应。发送完以后会有一个异步消息通知。
@Test
@SneakyThrows
public void asyncProducer(){
DefaultMQProducer producer = new DefaultMQProducer("async-producer-group");
producer.setNamesrvAddr("127.0.0.1:9876");
producer.start();
Message message = new Message("asyncTopic", "我是一个异步消息".getBytes());
producer.send(message,new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.println("发送成功");
}
@Override
public void onException(Throwable throwable) {
System.out.println("发送失败");
}
});
System.out.pri