direct:根据routingKey匹配 既路由模式
fanout:不指定名称进行广播消息,既发布订阅模式
topic:根据routingKey进行正则匹配,即topic模式
headers:
package com.caicongyang.mq.topic; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import java.util.UUID; /** * @author caicongyang1 * @version id: SendLogTopic, v 0.1 16/9/30 下午2:20 caicongyang1 Exp $$ */ public class SendLogTopic { private final static String EXCHANGE_NAME = "topic-logger"; public static void main(String[] args) throws Exception { // 创建连接和频道 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("192.168.236.103"); factory.setUsername("admin"); factory.setPassword("admin"); factory.setPort(AMQP.PROTOCOL.PORT); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); // 声明转发器 channel.exchangeDeclare(EXCHANGE_NAME, "topic"); //定义绑定键 String[] routing_keys = new String[] { "login.fail.user", "", "login.success.user" }; for (String routing_key : routing_keys) { //发送4条不同绑定键的消息 String msg = UUID.randomUUID().toString(); channel.basicPublish(EXCHANGE_NAME, routing_key, null, msg.getBytes()); System.out.println(" [x] Sent routingKey = " + routing_key + " ,msg = " + msg + "."); } channel.close(); connection.close(); } }
package com.caicongyang.mq.topic;
import com.rabbitmq.client.*;
/**
* @author caicongyang1
* @version id: ReceiveLogsFromTopic, v 0.1 16/9/30 下午2:24 caicongyang1 Exp $$
*/
public class ReceiveLogsFromTopic {
private final static String EXCHANGE_NAME = "topic-logger";
public static void main(String[] args) throws Exception {
// 创建连接和频道
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.236.103");
factory.setUsername("admin");
factory.setPassword("admin");
factory.setPort(AMQP.PROTOCOL.PORT);
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
// 声明转发器
channel.exchangeDeclare(EXCHANGE_NAME, "topic");
// 随机生成一个队列
String queueName = channel.queueDeclare().getQueue();
//接收所有与kernel相关的消息
channel.queueBind(queueName, EXCHANGE_NAME, "login.fail.user");
System.out.println(" [*] Waiting for messages about login.fail.user");
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(queueName, true, consumer);
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
String routingKey = delivery.getEnvelope().getRoutingKey();
System.out.println(" [x] Received routingKey = " + routingKey + ",msg = " + message + ".");
}
}
}
设置消息持久化:
//往队列中发出一条消息
//MessageProperties.PERSISTENT_TEXT_PLAIN 标识我们的信息为持久化的
channel.basicPublish("", QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN , message.getBytes());
更多精彩内容请继续关注我的博客:http://blog.csdn.NET/caicongyang