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.可觀察隊列內消息的動態變化

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