首先需要在虚拟机里面启动先启动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中的应用差不多就讲完了,喜欢我的文章的小伙伴可以点个小心心关注一下哦!