由于最近项目需要用到Rabbitmq的数据持久化技术,利用空闲时间,分别对Rabbitmq的三种常用的Exchange(direct、fanout、topic)写了个测试实例,仅供初学者参考学习,还望各路大神勿吐槽。
开发之前需要引用包:最好是3.4.0以下版本,因为以上版本试过,出现超时,具体原因尚未研究,还望研究过的大神留言告知一下,谢谢。
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.4.0</version>
</dependency>
1.direct(发布与订阅)
1.1生产者(Direct)
public class Direct {
private static final String EXCHANGE_NAME = "temp_direct";
private static final String[] TYPE = { "info", "warning", "error" };
public static void main(String[] argv) throws java.io.IOException
{
// 创建连接和频道
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.32.129");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
// 声明转发器的类型
channel.exchangeDeclare(EXCHANGE_NAME, "direct",true);
//发送6条消息
for (int i = 0; i <TYPE.length; i++)
{
String rand = getRandom();
String message = rand + "_log :" + UUID.randomUUID().toString();
//持久化
channel.queueDeclare(TYPE[i], true, false, false, null);
//流量
channel.basicQos(1);
//将消息队列绑定到Exchange
channel.queueBind(TYPE[i], EXCHANGE_NAME, TYPE[i]);
// 发布消息至转发器,指定routingkey
channel.basicPublish(EXCHANGE_NAME, TYPE[i], null, message
.getBytes());
System.out.println("队列" + TYPE[i] + "绑定成功!");
}
channel.close();
connection.close();
}
/**
* 随机产生一种日志类型
*
* @