RocketMQ原生API以及整合SpringBoot

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

一、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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值