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

        然后需要先启动RocketMQ

        

java 使用msmq java中mq的使用_rocketmq

        进行启动:         

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

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

java 使用msmq java中mq的使用_java 使用msmq_02

 这里说明一下,版本根据你虚拟机安装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中的应用差不多就讲完了,喜欢我的文章的小伙伴可以点个小心心关注一下哦!