java 使用RabbitMQ 主题

RabbitMQ 的简单使用 主题模式

1.进入jar包

		<dependency>
		    <groupId>com.rabbitmq</groupId>
		    <artifactId>amqp-client</artifactId>
		    <version>4.7.0</version>
		</dependency>

2. 消息发布者

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.google.common.base.Strings;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 *  发布者
 */
public class ComPublisher {
    
    public static void main(String[] args) throws IOException, TimeoutException {
    
        final String EXCHANGE_NAME = "topic_exc";
        final String ROUTING_KEY = "exc_key";
        
        //创建连接连接到MabbitMQ
        ConnectionFactory factory = new ConnectionFactory();
        // 设置MabbitMQ所在主机ip或者主机名
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        factory.setUsername("guest");
        factory.setPassword("guest");
        // 创建一个连接
        Connection connection = factory.newConnection();
        // 创建消息通道
        Channel channel = connection.createChannel();
        // 指定转发——广播
        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);
        for(int i=0;i<100;i++){
            //每一个设备,每种日志级别发送一条日志消息
            
            // 发送的消息
            String message =i+" Hello World!"+Strings.repeat(".", i+1);
            //参数1:exchange name
            //参数2:routing key
            channel.basicPublish(EXCHANGE_NAME,  ROUTING_KEY, null, message.getBytes());
        }
        // 关闭频道和连接
        channel.close();
        connection.close();
    }


}

3.消息订阅者

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.BuiltinExchangeType;
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;

/**
 *  订阅者
 */
public class ComSubscribe {

    
    public static void main(String[] argv) throws IOException, InterruptedException, TimeoutException {

        final String EXCHANGE_NAME = "topic_exc";
        final String ROUTING_KEY = "exc_key";
        final String QUEUE_NAME = "topic_queue";
        
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        // 打开连接和创建频道,与发送端一样
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
 
        //声明exchange
        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);
        // 声明一个队列
        //String queueName = channel.queueDeclare().getQueue();//随机队列
        channel.queueDeclare(QUEUE_NAME, true, false, false, null);
 
        channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);
        
        // 创建队列消费者
        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( envelope.getRoutingKey() + " : " + message );

              }
            };
            channel.basicConsume(QUEUE_NAME, true, consumer);
    }
    
}

猜你喜欢

转载自blog.csdn.net/liyongbing1122/article/details/81064222