1 RabbitMQ
实现了解耦、异步调用服务
MQ(Message Queue)消息队列是应用程序和应用程序之间的通信方法。
RabbitMQ:是有一个开源的,基于AMQP协议实现的,可复用的企业消息系统,支持主流的操作系统,Linux/Windows/MacOX等。支持多语言开发java、python、Ruby、.NET、PHP、C/C++、node.js等。用Erlang语言开发,是一个面向并发的语言。
2 环境搭建
2.1 window系统安装
1、安装Erlang虚拟机ErlangOTP到C盘(其他盘可能无法正常启动)
注:使用默认安装路径,系统用户名为英文,计算机名不能包含中文,当前用户为管理员,如果报一个file警告忽略就可以。
2、安装RabbitMQService
注:第一步全部打勾,安装路径默认
3、启用管理
- 找到RabbitMQ安装路径下sbin目录,进入,右键选择OpenCMD
- 执行rabbitmq-plugins enable rabbitmq_management(执行完毕提示started 6 plugins)
- 在浏览器执行 http://127.0.0.1:15672 ,用户名guest密码guest,登录成说明RabbitMQ服务端安装成功
- 创建用户,配置username、password、tags(角色:admin/monittoring/policymark/none)。
- 配置Virtual hosts。设置name例如"/name"。进入新创建的Virtual hosts添加用户。
2.2 管理界面功能
amqp协议端口 5672
控制台端口 15672
clustering集群端口 25672
3 项目集成
3.1 Hello World
-
说明
P:消息生产者
C:消息消费者
红色:队列
生产者将消息发送到队列,消费者从队列中获取消息 -
步骤
1、pom文件引入jar包
2、生产者java代码
/**
* 生产消息
*/
Connection connection = ConnectionUtil.getConnection();//获取链接
Channel channel = connection.createChannel();//创建一个通道
channel.queueDeclare("queueName",false,false,false,null);//声明一个队列
channel.basicPublish("","queueName",null,"sendMessageContext".getBytes());//发送消息
channel.close();//关闭通道
connection.close();//关闭链接
/**
* 创建链接
*/
publish static Connection getConnection(){
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("服务地址");
factory.setPort("服务端口");
factory.setVirtualHost("/VirtualHost");
factory.setUsername("username");
factory.setPassword("password");
Connnection connnection = factory.newconnnection();
return connnection;
}
3、消费者java代码
Connection connection = ConnectionUtil.getConnection();//获取链接
Channel channel = connection.createChannel();//创建一个通道
channel.queueDeclare("queueName",false,false,false,null);//声明一个队列(如果队列不存在则创建,如果存在则什么都不做)
QueueingConsumer consumer = new QueueingConsumer();//定义一个队列消费者
channel.basicConsumer("queueName",true,consumer);//监听队列
while(true){
QueueConsumer.Delivery delivery = consumer.nextDelivery();//获取消息
String message = new String(delivery.getBody());//获取消息体
System.out.println(message);
}
4 项目问题
4.1 启动报错,找不到消息队列
有时候新增一个消息队列,需要手动在控制台新增。
1、登录http://mqip:15672/
2、 进入Queues菜单,下拉到页面底部,创建消息队列
删除:点击Queue Name进入详情页,点击Delete