RabbitMQ详解(二)-----简单使用

一.简单案例

1.创建Maven工程,pom.xml引入依赖

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

2.生产者

public class MyProducer {
    private final static String EXCHANGE_NAME = "SIMPLE_EXCHANGE";
    public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
          // 连接 IP
        factory.setHost("127.0.0.1");
          // 连接端口
        factory.setPort(5672);
        // 虚拟机
        factory.setVirtualHost("/");
          // 用户
        factory.setUsername("guest");
        factory.setPassword("guest");
        // 建立连接
        Connection conn = factory.newConnection();
        // 创建消息通道
        Channel channel = conn.createChannel();
        // 发送消息
        String msg = "HelloWorld";
        channel.basicPublish(EXCHANGE_NAME, "test.best", null, msg.getBytes());
        channel.close();
        conn.close();
    }
}

3.消费者

public class MyConsumer {
    private final static String EXCHANGE_NAME = "SIMPLE_EXCHANGE";
    private final static String QUEUE_NAME = "SIMPLE_QUEUE";
    public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("guest");
        factory.setPassword("guest");
        Connection conn = factory.newConnection();
        Channel channel = conn.createChannel();
        // 声明交换机(参数1.交换机名
        //         2.交换机类型:direct,topic,fanout.
        //         3.是否持久化,代表交换机在服务器重启后是否还存在
        //         4.是否自动删除,设置为TRUE则表是自动删除,自删除的前提是至少有一个队列或者交
        //           换器与这交换器绑定,之后所有与这个交换器绑定的队列或者交换器都与此解绑.
        //         5.其它一些结构化参数比如:alternate-exchange)
        channel.exchangeDeclare(EXCHANGE_NAME,"direct",false, false, null);
        // 声明队列(参数1 队列名
        //    2是否持久化,代表队列在服务器重启后是否还存在
        //    3是否排他性队列。排他性队列只能在声明它的 Connection中使用(可以在同一个
        //              Connection 的不同的 channel 中使用),连接断开时自动删除。
        //    4.是否自动删除。如果为 true,至少有一个消费者连接到这个队列,之后所有与这个队列
        //               连接的消费者都断开时,队列会自动删除。
        //    5.队列的其他属性
        //     )
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        System.out.println(" Waiting for message....");
         // 绑定队列和交换机
        channel.queueBind(QUEUE_NAME,EXCHANGE_NAME,"test.best");
            // 创建消费者
        Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                String msg = new String(body, "UTF-8");
                System.out.println("Received message : '" + msg + "'");
                System.out.println("consumerTag : " + consumerTag );
                System.out.println("deliveryTag : " + envelope.getDeliveryTag());
            }
        };
         // 开始获取消息
        channel.basicConsume(QUEUE_NAME, true, consumer);
    }
}

5.打开控制台localhost:15672.可观察队列内消息的动态变化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章