package cn.com.wy;
import cn.com.wy.tool.Const;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
//本项目为RabbitMQ学习实例,
//内容如下,
//1.java和java组合.java语言的'消息发送者'和java语言的'消息接收者'.
//2.java和JavaScript组合.java语言的'消息发送者'和JavaScript语言的'消息接收者'.
//RabbitMQ服务器地址
//http://192.168.3.100:15672/
//管理员用户名:guest 密码:guest
//用户名:wy 密码:1
/***
* 消息队列/不管是生产者还是消费者,连接队列的代码都是一样的,这样可以通用一些.
*
* @author WY
* @ 2017年8月1日
*/
public abstract class MessQueue {
//Channel是我们与RabbitMQ打交道的最重要的一个接口,
//我们大部分的业务操作是在Channel这个接口中完成的,
//包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等
protected Channel chan = null;
//Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑
private Connection conn = null;
//路由key
protected String routeKey;
//交换器名称
protected String exchange;
public MessQueue (String ex,String key) throws Exception {
this.exchange = ex;
this.routeKey = key;
//ConnectionFactory为Connection的制造工厂
ConnectionFactory fac = new ConnectionFactory();
//设置连接工厂地址
fac.setHost(Const.MQ_SERVER_IP);
//fac.setHost("localhost");
//设置连接工厂端口号
fac.setPort(Const.MQ_SERVER_PORT);
//fac.setPort(15672);
//设置连接工厂用户名
fac.setUsername(Const.MQ_SERVER_USERNAME);
//设置连接工厂密码
fac.setPassword(Const.MQ_SERVER_PWD);
//创建连接
conn = fac.newConnection();
//创建通道
chan = conn.createChannel();
//为交换器
//"exchange"交换器名称
//"type"交换器的类型./分别为:"fanout","direct","topic","headers"
chan.exchangeDeclare(exchange, "fanout");
//注:queueDeclare
//第一个参数:队列映射的路由key.
//第二个参数:是否持久化(true:是,队列将在服务器重启时生存)
//第三个参数:是否是独占队列(创建者可以使用的私有队列,断开后自动删除)
//第四个参数:当所有消费者客户端连接断开时是否自动删除队列.
//第五个参数:队列的其他参数
chan.queueDeclare(key, false, false, false, null);
}
/***
* 关闭Channel和Connection.并非必须,因为隐含是自动调用的.
* @throws Exception
*/
public void close () throws Exception {
this.chan.close();
this.conn.close();
}
}