一、Java原生API
一、maven依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.7.1</version>
</dependency>
在RocketMQ源码包中的example模块提供了非常详尽的测试代码,可以拿来直接调试,完整示例代码可在源码中查看。
二、指向NameServer
生产者和消费者都需要依赖NameServer才能运行,将NameServer指向RocketMQ集群,就可以连接RocketMQ集群,不需要管Broker在哪里。而RocketMQ提供的生产者和消费者寻找NameServer的方式有两种:
1、在代码中指定namesrvAddr属性。例如:consumer.setNamesrvAddr(“127.0.0.1:9876”);
2、通过NAMESRV_ADDR环境变量来指定。多个NameServer之间用分号连接。
三、消息类型
1.简单样例
消息发送端
- 单向发送:只负责把消息推送到MQ,推过去之后就不再管,这种方式吞吐量高。
- 同步发送:发送消息后,等待MQ返回再进行后续的操作,能够知道消息是否成功发送到MQ,这种方式最慢,但是安全性最高,不易丢失消息。
- 异步发送:发送消息后继续自己的后续操作,但是会给MQ一个回调函数,MQ接收到消息后会请求producer的回调函数。此时producer和broker是双向交互的关系,producer既是客户端也是服务端,broker同理。
public class Producer {
public static void main(String[] args) throws MQClientException, InterruptedException {
//1.创建消息生产者producer,并指定生产者组名
DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
//2.指定Nameserver地址,也可以通过环境变量配置
//producer.setNamesrvAddr("127.0.0.1:9876");
//3.启动producer
producer.start();
for (int i = 0; i < 128; i++)
try {
{
//4.创建消息对象,指定主题Topic、Tag和消息体
Message msg = new Message("TopicTest",
"TagA",
"OrderID188",
"Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
//5.发送消息
//同步发送
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
//单向发送,这个方法没有返回值。
producer.sendOneway(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
//6.关闭生产者producer
producer.shutdown();
}
}
public class AsyncProducer {
public static void main(String[] args) throws MQClientException, InterruptedException, UnsupportedEncodingException {
DefaultMQProducer producer = new DefaultMQProducer("Jodie_Daily_test");
producer.start();
producer.setRetryTimesWhenSendAsyncFailed(0);//重试次数
int messageCount = 100;
//由于是异步发送,这里引入一个countDownLatch,保证所有Producer发送消息的回调方法都执行完了再停止Producer服务。
final CountDownLatch countDownLatch = new CountDownLatch(messageCount);
for (int i = 0; i < messageCount; i++) {
try {
final int index = i;
Message msg = new Message("TopicTest",
"TagA",
"OrderID188",
"Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
//异步发送
producer.send(msg, new SendCallback() {
//发送消息成功
@Override
public void onSuccess(SendResult sendResult) {
countDownLatch.countDown();
System.out.printf("%-10d OK %s %n", index, sendResult.getMsgId());
}
//发送消息失败
@Override
public void onException(Throwable e) {
countDownLatch.countDown();
System.out.printf("%-10d Exception %s %n", index, e);
e.printStackTrace();
}
});
System.out.println("消息发送完成");
} catch (Exception e) {
e.

本文详细介绍了RocketMQ消息系统的各种消息类型及应用场景,包括简单消息、顺序消息、广播消息、延迟消息、批量消息、过滤消息、事务消息等,并展示了如何在Spring Boot项目中集成RocketMQ。

389

被折叠的 条评论
为什么被折叠?



