RocketMQ在java中的应用


        首先需要在虚拟机里面启动先启动RocketMQ的NameServer:nohup sh bin/mqnamesrv &和Broker :nohup sh bin/mqbroker -n localho.

        然后需要先启动RocketMQ

        

        进行启动:         

cmd中输入:java -jar rocketmq-console-ng-1.0.1.jar.

        在项目中需要先导入RocketMQ的依赖:

 这里说明一下,版本根据你虚拟机安装MQ的版本号对应的.

        然后我这里是在main方法里面的测试:

        发送消息队列一般用到的分为3种:

        一.同步发送

           1.创建一个provider对象,准备发送消息

 DefaultMQProducer producer = new DefaultMQProducer("yizhong");

        这里面的内容可以随便写,但是不能用MQ的默认的方法,不然启动会报错误

2、创建一个nameserver对象,通过ip加端口来定位要将消息发送到哪里
producer.setNamesrvAddr("192.168.1.10:9876");

这里的端口号是你的虚拟机的端口号

//3、启动MQ,创建消息,包括topic,消息组,消息主体
producer.start();
 String  aa="{name:陈玉喆,age:38}";
4、通过nameserver找到broker对象
Message message = new Message("com","tm","mq",aa.getBytes());

这里说一下需要把string转换成byte类型

5、通过broker对象发送消息
 producer.send(message);

6.关闭连接

producer.shutdown();

到这里同步发送就完成了

二、异步发送

        异步发送前面都一样

到第5部不一样

5、通过broker对象发送消息
 //5、通过broker对象发送消息
        producer.send(message, new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                //6、关闭各种对象
                System.out.println("成功发送");
                producer.shutdown();
            }

            @Override
            public void onException(Throwable throwable) {
                //6、关闭各种对象
                System.out.println("失败发送");
                producer.shutdown();
            }
        });
           System.out.println("执行顺序");

这里运行一下就可以看出来,先输出了”执行顺序“”,后输出了“发送成功”,所以如果要关闭连接需要在“发送成功”后关闭

        这样异步发送也就完成了

三、单向发送

        单向发送和异步发送一样,在第五部跟同步发送不一样

        

//5、通过broker对象发送消息
        producer.sendOneway(message);
        //6.关闭连接
        producer.shutdown();

        这样消息队列3大发送基本上已经完成了.

        

        再下来讲一下怎么消费这些信息

//push 是在消费者消费信息后可以返回告诉MQ消费状态的对象
        //pull 只管消费对象,后续可能没有其他操作
        //1.创建消费信息,里面的参数可以不跟发送信息的对应
        DefaultMQPushConsumer defaultMQPushConsumer = new DefaultMQPushConsumer("yizhong");
        //2.设置NameSRv端口
        defaultMQPushConsumer.setNamesrvAddr("192.168.1.10:9876");
        //设置一些消息的参数
        //是否顺序消费(先进新出/根据时间....)
        defaultMQPushConsumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
        //设置要消费哪类消息
        defaultMQPushConsumer.subscribe("com","tm");
        //进行消费信息
        defaultMQPushConsumer.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 a=new String(body);
                    //转成json
                    JSONObject jsonObject = JSONObject.parseObject(a);
                    //输出消费信息
                    System.out.println("姓名" +jsonObject.get("name")+"年龄"+jsonObject.get("age"));
                }
                return ConsumeOrderlyStatus.SUCCESS;
            }
        });
        //直接消费
        defaultMQPushConsumer.start();
        //这里不需要结束,需要一直保持工作状态

        就这样MQ在java中的应用差不多就讲完了,喜欢我的文章的小伙伴可以点个小心心关注一下哦!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值