RocketMQ的使用

1. 导入依赖

//这里使用的是原生Jar包,也可以使用rocketmq-spring-boot-starterd组件
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>4.9.1</version>
</dependency>

2. properties文件配置

#rocketmq
rocketmq.name.server.address=服务器地址:9876

3. 写配置文件

public class RocketMQConfig{
    @Value("${rocketmq.name.server.address}")
    private String nameServerAddr;
    
    @Bean("momentsProducer")//指定Bean的名字
    public DefaultMQProducer momentProducer() throws Exception{
        //1.创建一个DefaultMQProducer,并设置生产者分组
        DefaultMQProducer producer = new DefaultMQProducer("分组名");
        //2.设置名称服务器地址
        producer.setNamesrvAddr(nameServerAddr);
        //3.启动producer
        producer.start();
        return producer;
    }
    
    @Bean("momentsConsumer")
    public DefaultMQPushConsumer momentConsumer() throws Exception{
        //1.创建一个DefaultMQPushConsumer,并设置消费者分组,分组名与对应生产者分组相同
        DefaultMQPushConsumer comsumer = new DefaultMQPushComsumer("分组名");
        //2.设置名称服务器地址
        comsumer.setNamesrvAddr(nameServerAddr);
        //3.设置订阅主题和二级主题
        consumer.subscribe("Topic名字","Tag名字");
        //4.注册消息监听器,可选择并发消费MessageListenerConcurrently或者顺序消费MessageListenerOrderly
        consumer.registerMessageListener(new MessageListenerConcurrently(){
            //4.1 重写MessageListenerConcurrently接口中consumerMessage方法,设置消费结果回调函数和处理消息逻辑
            @Override
            public ConsumeConcurrentlyStatus consumerMessage(List<MessageExt> msgs,
            ConsumeConcurrentlyContext consumeConcurrentlyContext){
                for(MessageExt msg : msgs){
                    System.out.println(msg);
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
        //5.启动consumer
        consumer.start();
        return consumer;
    }
}

4. 写RocketMQUtil用于发送消息

public class RocketMQUtil{
    //1.同步发送消息
    public static void syncSendMsg(DefaultMQProducer producer, Message msg)throws Exception{
        SendResult sendResult = producer.send(msg);
        System.out.println(sendResult);
        //销毁Producer对象可以节约系统内存,如果需要频繁发送消息,则无需销毁Producer对象。
        producer.shutdown();
    }
    
    //2.异步发送消息
    public static void asyncSendMsg(DefaultMQProducer producer,Message msg) throws Exception{
        int messageCount = 2;
        for(int i = 0;i < messageCount;i++){
            //SendCallback,接受异步返回结果的响应逻辑
            producer.send(msg, new SendCallback() {
                @Override
                public void onSuccess(SendResult sendResult) {
                    System.out.println(sendResult.getMsgId());
                }
                @Override
                public void onException(Throwable e) {
                    System.out.println("发送消息的时候出现异常" + e);
                    e.printStackTrace();
                }
            });
        }
        producer.shutdown();
    }
    
    //3.单向发送消息
    public static void oneWaySendMsg(DefaultMQProducer producer,Message msg) throws Exception {
        int messageCount = 2;
        for(int i = 0;i < messageCount;i++){
            producer.sendOneway(msg);
        }
        producer.shutdown();
    }
}

5.使用RocketMQ发送消息

public class UserMomentService{
    @Autowired
    private static ApplicationContext applicationContext;
    
    public static void main(String[] args) throws Exception {
        DefaultMQProducer producer = (DefaultMQProducer) applicationContext.getBean("momentProducer");
        Message msg = new Message(UserMomentsConstant.MOMENTS_TOPIC,JSONObject.toJSONString(消息的主体).
                                  getBytes(StandardCharsets.UTF_8));
        RocketMQUtil.syncSendMsg(producer,msg);
    }
}

总结

生产者发送消息的过程

1.创建生产者producer,设置生产者分组。
(RocketMQ 服务端 5.x 版本开始,生产者是匿名的,无需管理生产者分组ProducerGroup)
2.指定Nameserver地址。
3.启动producer。
4.创建消息对象,指定主题Topic、Tag和消息体。
5.发送消息。
6.关闭生产者producer。

消费者消费消息的过程

1.创建消费者consumer,设置消费者组名。
2.指定Nameserver地址。
3.订阅Topic和Tag。
4.注册消息监听器,设置消费结果回调函数,处理消息。
5.启动消费者consumer。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上世纪90年代的他

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值