RabbitMQ Topics

来源:互联网 发布:监测他人网络 编辑:程序博客网 时间:2024/06/05 20:42

消息生产者

package com.gch.rabbit.topic;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;public class TopicSend {    private static final String EXCHANGE_NAME = "topic_logs";    public static void main(String[] argv) {        Connection connection = null;        Channel channel = null;        try {            ConnectionFactory factory = new ConnectionFactory();            factory.setHost("localhost");            connection = factory.newConnection();            channel = connection.createChannel();            //声明一个匹配模式的交换器            channel.exchangeDeclare(EXCHANGE_NAME, "topic");            // 待发送的消息            String[] routingKeys = new String[]{"quick.orange.rabbit",                "lazy.orange.elephant","quick.orange.fox","lazy.brown.fox",                "quick.brown.fox","quick.orange.male.rabbit","lazy.orange.male.rabbit"};            //发送消息            for(String severity : routingKeys){                String message = "发送路由字段:"+severity;                channel.basicPublish(EXCHANGE_NAME, severity, null, message.getBytes());                System.out.println("匹配交换器发送" + severity + "," + message);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            if (connection != null) {                try {                    connection.close();                } catch (Exception ignore) {                }            }        }    }}

1号消息消费者

package com.gch.rabbit.topic;import com.rabbitmq.client.AMQP;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.Consumer;import com.rabbitmq.client.DefaultConsumer;import com.rabbitmq.client.Envelope;import java.io.IOException;public class ReceiveLogsTopic1 {    private static final String EXCHANGE_NAME = "topic_logs";    public static void main(String[] argv) throws Exception {        ConnectionFactory factory = new ConnectionFactory();        factory.setHost("localhost");        Connection connection = factory.newConnection();        Channel channel = connection.createChannel();        //声明一个匹配模式的交换器        channel.exchangeDeclare(EXCHANGE_NAME, "topic");        String queueName = channel.queueDeclare().getQueue();        //路由关键字        String[] routingKeys = new String[]{"*.orange.*"};        //绑定路由关键字        for (String bindingKey : routingKeys) {            channel.queueBind(queueName, EXCHANGE_NAME, bindingKey);            System.out.println("1号匹配交换器接:"+EXCHANGE_NAME+", 队列:"+queueName+", 绑定路由:" + bindingKey);        }        System.out.println("1号匹配交换器接正在等待消息...");        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("1号匹配交换器收到消息:" + envelope.getRoutingKey() + "," + message);            }        };        channel.basicConsume(queueName, true, consumer);    }}
2号消息消费者

package com.gch.rabbit.topic;import com.rabbitmq.client.AMQP;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.Consumer;import com.rabbitmq.client.DefaultConsumer;import com.rabbitmq.client.Envelope;import java.io.IOException;public class ReceiveLogsTopic2 {    private static final String EXCHANGE_NAME = "topic_logs";    public static void main(String[] argv) throws Exception {        ConnectionFactory factory = new ConnectionFactory();        factory.setHost("localhost");        Connection connection = factory.newConnection();        Channel channel = connection.createChannel();        //声明一个匹配模式的交换器        channel.exchangeDeclare(EXCHANGE_NAME, "topic");        String queueName = channel.queueDeclare().getQueue();        //路由关键字        String[] routingKeys = new String[]{"*.*.rabbit", "lazy.#"};        //绑定路由关键字        for (String bindingKey : routingKeys) {            channel.queueBind(queueName, EXCHANGE_NAME, bindingKey);            System.out.println("2号匹配交换器接:"+EXCHANGE_NAME+", 队列:"+queueName+", 绑定路由:" + bindingKey);        }        System.out.println("2号匹配交换器接正在等待消息...");        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("1号匹配交换器收到消息:" + envelope.getRoutingKey() + "," + message);            }        };        channel.basicConsume(queueName, true, consumer);    }}

原创粉丝点击