【RocketMQ 】API 入门教程 (延迟消息,顺序消息,广播消息)

RocketMQ 官网 |
RocketMQ 快速开始&安装

一、安装

基本步骤略

windows bat

start .\bin\mqnamesrv.cmd
timeout 5
start .\bin\mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true

二、控制台

git clone https://github.com/apache/rocketmq-externals
cd rocketmq-console
mvn clean package -Dmaven.test.skip=true

注意:打包前在rocketmq-console中配置namesrv集群地址:
rocketmq.config.namesrvAddr=192.168.25.135:9876;192.168.25.138:9876

启动

java -jar rocketmq-console-ng-1.0.0.jar

浏览器访问http://localhost:8080

三、普通消息

3.1 基本步骤

3.1.1 生产者
  1. 创建消息生产者producer,并制定生产者组名
  2. 指定Nameserver地址
  3. 启动producer
  4. 创建消息对象 Message,指定主题Topic、Tag和消息体
  5. 发送消息
  6. 关闭生产者producer
3.1.2 消费者
  1. 创建消费者Consumer,制定消费者组名
  2. 指定Nameserver地址
  3. 订阅主题Topic和Tag
  4. 设置回调函数,处理消息
  5. 启动消费者consumer

3.2 同步消息

3.2.1 生产者
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

/**
 * <h1>同步消息 - 生产者</h1>
 *
 * @author Vincent Vic
 * @version 1.0
 */
public class ProducerSync {
   

    public static void main(String[] args) throws Exception {
   
        // 1.创建消息生产者producer,并制定生产者组名
        DefaultMQProducer producer = new DefaultMQProducer("demo_producer_group");
        // 2.指定Nameserver地址
        producer.setNamesrvAddr("127.0.0.1:9876");
        // 3.启动producer
        System.out.println("生产者启动");
        producer.start();

        for (int i = 0; i < 3; i++) {
   
            // 4.创建消息对象,指定主题Topic、Tag和消息体
            /**
             * 参数一:消息主题Topic
             * 参数二:消息Tag
             * 参数三:消息内容
             */
            Message msg = new Message("Topic_demo_sync", "Tag_demo_sync",
                ("Hello," + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
            // 5.发送同步消息
            SendResult sendResult = producer.send(msg);
            System.out.println("发送结果:" + sendResult);
        }

        // 6.关闭生产者producer
        producer.shutdown();
        System.out.println("生产者关闭");
    }
}
3.2.2 消费者
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.remoting.common.RemotingHelper;

import java.io.UnsupportedEncodingException;
import java.util.List;

/**
 * <h1>同步消息 - 消费者</h1>
 *
 * @author Vincent Vic
 * @version 1.0
 */
public class ConsumerSync {
   

    public static void main(String[] args) throws Exception {
   
        // 1.创建消费者Consumer,制定消费者组名
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("demo_consumer_group");
        // 2.指定Nameserver地址
        consumer.setNamesrvAddr("127.0.0.1:9876");

        // 消息拉取最大条数
        consumer.setConsumeMessageBatchMaxSize(2);
        // 3.订阅主题Topic和Tag
        consumer.subscribe("Topic_demo_sync", "*");

        // 4.设置回调函数,处理消息
        consumer.registerMessageListener(new MessageListenerConcurrently() {
   

            // 接受消息内容
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
   
                for (MessageExt msg : msgs) {
   

                    try {
   
                        // 获取主题
                        String topic = msg.getTopic();
                        // 获取标签
                        String tags = msg.getTags();
                        // 获取信息
                        byte[] body = msg.getBody();
                        String result = new String(body, RemotingHelper.DEFAULT_CHARSET);
                        System.out.println("Consumer消费信息:topic:" + topic + ",tags:" + tags + ",result:" + result);

                    } catch (UnsupportedEncodingException e) {
   
                        e.printStackTrace();
                    }
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
        // 5.启动消费者consumer
        consumer.start();
    }
}

3.3 异步消息

3.3.1 生产者
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

/**
 * <h1>异步消息 - 生产者</h1>
 *
 * @author Vincent Vic
 * @version 1.0
 */
public class ProducerASync {
   

    public static void main(String[] args) throws Exception {
   
        // 1.创建消息生产者producer,并制定生产者组名
        DefaultMQProducer producer = new DefaultMQProducer("demo_producer_group");
        // 2.指定Nameserver地址
        producer.setNamesrvAddr("127.0.0.1:9876");
        // 3.启动producer
        System.out.println("生产者启动");
        producer.start();

        for (int i = 0; i < 3; i++) {
   
            // 4.创建消息对象,指定主题Topic、Tag和消息体
            /**
             * 参数一:消息主题Topic
             * 参数二:消息Tag
             * 参数三:消息内容
             */
            Message msg = new Message("Topic_demo_async", "Tag_demo_async",
                ("Hello," + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
            // 发送消息到一个Broker,异步发送没有返回值,需要使用 SendCallback 接收异步返回结果的回调
            producer.send(msg, new SendCallback() {
   
                @Override
                public void onSuccess(SendResult sendResult) {
   
                    System.out.println("发送成功:" + sendResult);
                }

                @Override
                public void onException(Throwable throwable) {
   
                    System.out.println("发送异常:" + throwable.getMessage());
                }
            });

        }
        Thread.sleep(2000);
        // 6.关闭生产者producer
        producer.shutdown();
        System.out.println("生产者关闭");
    }
}

3.23.2 消费者
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.remoting.common.RemotingHelper;

import java.io.UnsupportedEncodingException;
import java.util.List;

/**
 * <h1>异步消息 - 消费者</h1>
 *
 * @author Vincent Vic
 * @version 1.0
 */
public class ConsumerASync {
   

    public static void main(String[] args) throws Exception {
   
        // 1.创建消费者Consumer,制定消费者组名
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("demo_consumer_group");
        // 2.指定Nameserver地址
        consumer.setNamesrvAddr("127.0.0.1:9876");

        // 消息拉取最大条数
        consumer.setConsumeMessageBatchMaxSize(2);
        // 3.订阅主题Topic和Tag
        consumer.subscribe("Topic_demo_async", "*");

        // 4.设置回调函数,处理消息
        consumer.registerMessageListener(new MessageListenerConcurrently(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值