1.先安装esl-erlang_22.0~windows_amd64
2.第二安装:rabbitmq-server-3.7.17
3.在控制页面:rabbitmq-plugins enable rabbitmq_management 进入安装目录\sbin下,使用命令“rabbitmq-plugins enable rabbitmq_management”启动网页管理插件;
4.在浏览器中输入:http://localhost:15672
输入用户名:guest,密码:guest
4.添加用户
6.添加virtual hosts(相当于数据库)
一般以/开头
授权(点击/virtualHosts_zhm)
一:简单例子
1.获取连接类
package cn.zhm.util;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class GetRabbitConnectUtil {
/**
* 获取MQ的接连
*/
public static Connection getMQConnection() throws IOException, TimeoutException {
//1.定义一个接连工厂
ConnectionFactory factory = new ConnectionFactory();
//设置服务地址
factory.setHost("127.0.0.1");
//端口号
factory.setPort(5672);
//设置vHost
factory.setVirtualHost("/virtualHost-zhm");
//设置用户
factory.setUsername("user_zhm");
//设置密码
factory.setPassword("123");
return factory.newConnection();
}
}
2.生产者
package cn.zhm.util.simple;
import cn.zhm.util.GetRabbitConnectUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Send {
/**
* @Description: 生产者
* @Author: zhaohaiming
* @CreateDate: 2019/8/11 21:32
* @Version: 1.0
*/
private static final String QUEUE_NAME = "test_simple_name";
public static void main(String[] args) throws IOException, TimeoutException {
// TODO Auto-generated method stub
Connection connection = null;
Channel channel = null;
try {
//获取一个连接
connection = GetRabbitConnectUtil.getMQConnection();
//从连接中获取一个通道
channel = connection.createChannel();
//创建队列声明
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
/**
*1.queue 队列名称
*
* 2.durable 是否持久化 false 否 ture 是 如果持久化 mq重启后队列还在
*
* 3.exclusive 是否独占连接 队列只允许在该连接中访问,如果连接关闭队列自动删除,
* 如果参数设置为true可用临时队列的创建
*
* 4.autodelete 队列不再使用时是否自动删除队列 如果将此参数 和exclusive就可以实现临时队列(队列不用了就自动删除)
*
* 5. argument 参数 可以设置一个队列的参数
*/
//发送信息内容
String msg = "hello simple!!";
channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());
/**
* 1.exchange,交换机,如果不指定将使用mq的默认交换机
*
* 2.routigKey 路由key 交换机根据路由key来将消息转发到指定的队列,如果使用默认交换机 routKey设置为默认队列名称
*
* 3. props 消息的属性
*
* 4.boy 消息内容
*
* */
System.out.println("send msg信息:"+msg);
}catch (Exception e){
e.printStackTrace();
}finally {
channel.close();
connection.close();
}
}
}
3.消费者
package cn.zhm.util.simple;
import cn.zhm.util.GetRabbitConnectUtil;
import com.rabbitmq.client.*;
import java.io.IOException;
public class Reception {
/**
* @Description: 消费者接收信息
* @Author: zhaohaiming
* @CreateDate: 2019/8/11 21:58
* @Version: 1.0
*/
private static final String QUEUE_NAME = "test_simple_name";
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Connection connection = null;
Channel channel = null;
try {
//获取一个连接
connection = GetRabbitConnectUtil.getMQConnection();
//从连接中获取一个通道
channel = connection.createChannel();
//创建队列声明
boolean durable = false;
channel.queueDeclare(QUEUE_NAME,durable,false,false,null);
//获取消息
DefaultConsumer consumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
// super.handleDelivery(consumerTag, envelope, properties, body);
//交换机
String exchange = envelope.getExchange();
//消息id mq在change 中用来标识消息的id可用于确认消息已接收
long deliveryTag = envelope.getDeliveryTag();
String smg = new String(body,"utf-8");
System.out.println("消费者接收消息:"+smg);
}
};
/***
* 1.consumerTag 消息者标签,用来标识消费者的,在监听队列时设置channel.basicConsume
*
* 2.envelope 信封 通过envelope
*
* 3.properties 消息属性
*
* 4.body 消息内容
*/
//监听队列
channel.basicConsume(QUEUE_NAME,true,consumer);
/***
* 参数明细
* 1.queue 队列 名称
*
* 2.autoAck 自动回复 当消费者收到消息后会告诉mq消息已接收到,如果将此参数调车为ture表示会自动回复mq
* 如果设置为false 要通过编程实现回复
*
* 3.callback 消息方法 当消息者收到消息要执行的方法。
*
*/
}catch (Exception e){
e.printStackTrace();
}finally {
// channel.close();
// connection.close();
}
}
}
运行结果:
消费者接收消息:hello simple==!!
消费者接收消息:hello simple==!!
消费者接收消息:hello simple!!