简单消息例子
- 使用rocketMQ发送消息会有三种模式:可靠同步、可靠异步和单向三种传输
- 使用rocketMQ消费消息
1、添加依赖包
maven:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.3.0</version>
</dependency>
gradle:
compile 'org.apache.rocketmq:rocketmq-client:4.3.0'
2.1 同步发送消息
可靠同步传输有很广泛的应用场景,比如重要的通知,sms通知,sms市场营销系统等
public class SyncProducer {
public static void main(String[] args) throws Exception {
//指定一个生产者组名字初始化生产者
DefaultMQProducer producer = new
DefaultMQProducer("please_rename_unique_group_name");
// 指定命名服务的地址
producer.setNamesrvAddr("localhost:9876");
//启动实例
producer.start();
for (int i = 0; i < 100; i++) {
//创建消息实例,定义好topic、tag和消息体
Message msg = new Message("TopicTest" /* Topic */,
"TagA" /* Tag */,
("Hello RocketMQ " +
i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
);
//调用send方法将消息分发给broker集群
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
}
//当生产者实例不再使用时销毁生产者实例
producer.shutdown();
}
}
2.2 异步发送消息
异步传输通常被使用在对响应时间敏感的业务场景
public class AsyncProducer {
public static void main(String[] args) throws Exception {
//指定一个生产者组名字初始化生产者
DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
// 指定命名服务的地址
producer.setNamesrvAddr("localhost:9876");
//Launch the instance.
producer.start();
producer.setRetryTimesWhenSendAsyncFailed(0);
for (int i = 0; i < 100; i++) {
final int index = i;
//创建消息实例,定义好topic、tag和消息体
Message msg = new Message("TopicTest",
"TagA",
"OrderID188",
"Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
producer.send(msg, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.printf("%-10d OK %s %n", index,
sendResult.getMsgId());
}
@Override
public void onException(Throwable e) {
System.out.printf("%-10d Exception %s %n", index, e);
e.printStackTrace();
}
});
}
//当生产者实例不再使用时销毁生产者实例
producer.shutdown();
}
}
3 消费消息
public class Consumer {
public static void main(String[] args) throws InterruptedException, MQClientException {
//指定一个生产者组名字初始化生产者
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name");
// 指定命名服务的地址
consumer.setNamesrvAddr("localhost:9876");
// 给消费者指定一个或者多个topic
consumer.subscribe("TopicTest", "*");
// 注册回调函数,用于执行从brokers获取到的消息
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs);
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
//启动消费者实例
consumer.start();
System.out.printf("Consumer Started.%n");
}
}
4 查询更多
另外,你可以获取到更多的实例从:https://github.com/apache/rocketmq/tree/master/example