2019独角兽企业重金招聘Python工程师标准>>>
四种交换器
Fanout: 不管消息的routing key和参数表的头信息/值是什么, 消息将会路由到该队列上。
Topic: 如果消息的routing key与bingding的routing key符合通配符匹配的话, 消息将会路由到该队列上。
Direct: 如果消息的routing key与bingding的routing key直接匹配的话, 消息将会路由到该队列上。
Headers: 如果消息参数表中的头信息和值都与binding参数表中相匹配, 消息将会路由到该队列上。
创建消息生成者
String EXCHANGE_NAME = "uwo.topic";
// 创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
// 设置RabbitMQ相关信息
factory.setHost("10.211.55.8");
factory.setUsername("uwo");
factory.setPassword("yan5845hao");
factory.setVirtualHost("/");
factory.setPort(5672);
// 创建一个新的连接
Connection connection = factory.newConnection();
// 创建一个通道
Channel channel = connection.createChannel();
// 声明topic模式的交换机
channel.exchangeDeclare(EXCHANGE_NAME, "topic", true);
// 发送消息
String message = "Hello, UWO!";
channel.basicPublish(EXCHANGE_NAME, "com.uwo.rabbit", null, message.getBytes());
channel.close();
connection.close();
创建消息消费者
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("10.211.55.8");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
// 声明topic模式的交换机
channel.exchangeDeclare(EXCHANGE_NAME, "topic", true);
String queue = channel.queueDeclare().getQueue();
// 设置匹配的字符
channel.queueBind(queue, EXCHANGE_NAME, "com.uwo.#");
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, "UTF-8");
System.out.println("收到信息:" + message);
}
};
channel.basicConsume(queueName, true, consumer);