springBoot集成RecketMQ发送消息/接收消息

1  先导入依赖

    

    <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.4.0</version>
        </dependency>

2  recketMQ分很多种消息的发送与接收方式,用的比较多的发送消息的方式有4中
   /*
   1  同步
   2 异步
   3 单项发送
   4 死信
    */

3 (1)同步 我只写了三种



    //  一 同步发送 ,发送成功之后,在收到服务端的响应后,才会继续发下一条
    //适用场景:短信发送
    public static void main(String[] args) {
        try {
            // 1 创建一个提供消息的对象,准备发送消息
            DefaultMQProducer mq=new DefaultMQProducer("xxt-producer");
            // 2通过nameServer对象,找到我们要往哪里发送消息(IP,端口)
            mq.setNamesrvAddr("192.168.138.128:9876");
            // 3 启动mq对象
            mq.start();
            // 4  写一条数据
            String a="{name:'张三',age:12}";
            // 5 创建消息(Topic,messageKey,Tag)
            Message msg=new Message("tm-user","tm_tags","tm_keys",a.getBytes());
            // 6 通过nameServer找到broker后发送消息
            SendResult send = mq.send(msg);
            //返回发送结果进行查看
            System.out.println(send);
            // 7 关闭连接
            mq.shutdown();
        }catch (Exception e){
            e.printStackTrace();
        }

    }

   (2)异步发送消息

   //异步发送消息
    //一般用在发送方不用等待服务器第一时间的响应,可以直接发送下一条消息
    //应用场景:用户上传身份证进行验证信息
    //等待到什么时候服务器审核到了用户发送过来的身份信息
    //再进行回调
    public static void main(String[] args) throws MQClientException, RemotingException, InterruptedException {
        //前两步不变
        DefaultMQProducer producer = new DefaultMQProducer("tm_producer");
        producer.setNamesrvAddr("192.168.3.128:9876");
        //需要将producer对象启动起来
        producer.start();
        //编辑消息
        String aa = "{name:'佳佳王',age:50}";
        //创建消息
        Message msg = new Message("topicTmTest",
                "tagsTmTest","keyTmTest",aa.getBytes());
        //异步消息发送,通过SendCallback来进行设置发送成功和失败的回调
        producer.send(msg, new SendCallback() {
            //这里的成功/失败不会影响后续代码的执行
            @Override
            public void onSuccess(SendResult sendResult) {
                //成功
                System.out.println("成功回调了");
                producer.shutdown();
            }

            @Override
            public void onException(Throwable throwable) {
                //失败
                System.out.println("失败回调了");
                producer.shutdown();
            }
        });
        //执行一个代码试试看情况
        System.out.println("这是写在回调函数之后的代码");

        //不能关闭producer对象
        //因为producer要在后续代码执行的同时,同时监控成功/失败回调
    }

3 单线发送

   // 单线发送
    //只管发,不管早晚,也不管成败
    //应用场景:用于耗时短、且有可靠性,回调要求不高,例如 日志记录
    public static void main(String[] args) {
        try {

            //1 还是创建一个提供消息的对象,准备发送
            DefaultMQProducer mq=new DefaultMQProducer("xxt-producer");
            //2 通过nameServer对象,找到我们要往哪里发送消息(IP,端口)
            mq.setNamesrvAddr("192.168.138.128:9876");
            //3  需要将producer对象启动起来
            mq.start();
            // 4 编辑消息
       String a = "{name:'这是2笔订单',price:400.00}";
         // 5 创建消息
            Message msg=new Message("tm-hn-topic","tm-hn-tag",
                    "tm-hn-messhageKey",a.getBytes());
            // 6  发送消息
             mq.sendOneway(msg);
             //7 关闭连接
              mq.shutdown();
        }catch (Exception e){
         e.printStackTrace();
        }

    }

4 消费信息

  //消费信息
    //注意,同一个消息可以被不同组的消费者消费
    //不能被同一组消费者重复消费
    public static void main(String[] args) {
        try {

            //1 创建消费者对象
            //Push 是在消费者消费消息后可以返回告诉MQ消费状态的对象
            //Pull 是只管消费的对象,后续可能没什么处理
            DefaultMQPushConsumer mq=new DefaultMQPushConsumer("tm_consumer");
            //2 通过NameSrv设置IP+端口
            mq.setNamesrvAddr("192.168.138.128:9876");
            //3 设置一些消息的参数
            //是否顺序消费(先进先出/先进后出)
            //CONSUME_FROM_FIRST_OFFSET先进先出
            mq.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
            // 4 设定要消费的哪类信息
            mq.subscribe("tm-user","tm_tags");
            // 5 进行消费
             mq.registerMessageListener(new MessageListenerOrderly() {
                 @Override
                 public ConsumeOrderlyStatus consumeMessage(List<MessageExt> list, ConsumeOrderlyContext consumeOrderlyContext) {
                     //list就是根据条件得到的数据
                     //consumeOrderlyContext就是设置各种属性的上下文对象
                     //是否设置消费的消息在 被消费后被标记为以消费,相当于是删除的意思
                     consumeOrderlyContext.setAutoCommit(true);
                     for (MessageExt messageExt : list) {
                         byte[] body = messageExt.getBody();
                         String str = new String(body);
                         //转JSON
                         JSONObject jsonObj = JSONObject.parseObject(str);
                         String msgId = messageExt.getMsgId();
                         String topic = messageExt.getTopic();
                         String tags = messageExt.getTags();
                         System.out.print("姓名:"+jsonObj.get("name")+",年龄:"+jsonObj.get("age")+",");
                         System.out.println(msgId+","+topic+","+tags);
                     }
                     return ConsumeOrderlyStatus.SUCCESS;
                 }

             });
             //启动
            mq.start();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值