<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 準備 本教程假定 RabbitMQ 已在標準端口(5672) 的 localhost 上安裝并運行。如果使用不同的主機,端口或憑據,連接設置將需要調整。 ## 介紹 RabbitMQ 是一個消息代理:它接受并轉發消息。你可以將其視為郵局:當你將要發布的郵件放在郵箱中時,您可以確信 Postman 先生最終會將郵件發送給收件人。在這個比喻中,RabbitMQ 是一個郵箱,郵局和郵遞員。 RabbitMQ 和郵局之間的主要區別在于它不處理紙張,而是接受,存儲和轉發二進制數據塊的消息。 ## 常見術語 RabbitMQ 使用一些術語:生產者、隊列、消費者。 ### 生產者 一個發送消息的程序是一個生產者。 [![](https://gitee.com/chenssy/blog-home/raw/master/image/201810/rabbitmq_producer.png)](https://gitee.com/chenssy/blog-home/raw/master/image/201810/rabbitmq_producer.png) ### 隊列 隊列類似于郵箱。雖然消息通過 RabbitMQ 在你的應用中傳遞,但是它們只能存儲在隊列中。隊列只受主機的內存和磁盤限制的限制,它本質上是一個大的消息緩沖區。不同的生產者可以通過同一個隊列發送消息,此外,不同的消費者也可以從同一個隊列上接收消息。 [![](https://gitee.com/chenssy/blog-home/raw/master/image/201810/rabbitmq_queue.png)](https://gitee.com/chenssy/blog-home/raw/master/image/201810/rabbitmq_queue.png) ### 消費者 一個等待接收消息的程序是一個消費者。 [![](https://gitee.com/chenssy/blog-home/raw/master/image/201810/rabbitmq_consumer.png)](https://gitee.com/chenssy/blog-home/raw/master/image/201810/rabbitmq_consumer.png) 整個過程非常簡單,生產者創建消息,消費者接收這些消息。你的應用程序既可以作為生產者向其他應用程序發送消息,也可以作為消費者,等待接收其他應用程序的消息。其中,存儲消息的是消息隊列,它類似于郵箱,消息通過消息隊列進行投遞。 ## 案例實戰 – 使用 Java 客戶端實現 “Hello World!” 在本教程的這一部分,我們將用 Java 編寫一個 “Hello World” 的消息傳遞案例,它涉及兩個程序:發送單個消息的生產者,以及接收消息并將其打印出來的消費者。 在下圖中,“P”是我們的生產者,“C”是我們的消費者。中間的框是隊列 – RabbitMQ 代表消費者的消息緩沖區。 [![](https://gitee.com/chenssy/blog-home/raw/master/image/201810/rabbitmq_python-one.png)](https://gitee.com/chenssy/blog-home/raw/master/image/201810/rabbitmq_python-one.png) ### 準備工作 使用 Maven 進行依賴管理。 ~~~xml <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>3.6.3</version> </dependency> ~~~ ### 發送端 我們會調用生產者發送消息給消費者。生產者連接到 RabbitMQ,發送一條數據,然后退出。 ~~~java public class Send { private final static String QUEUE_NAME = "hello"; public static void main(String[] args) throws IOException, TimeoutException { // 創建連接 ConnectionFactory factory = new ConnectionFactory(); // 設置 RabbitMQ 的主機名 factory.setHost("localhost"); // 創建一個連接 Connection connection = factory.newConnection(); // 創建一個通道 Channel channel = connection.createChannel(); // 指定一個隊列 // queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments) // 參數1 queue :隊列名 // 參數2 durable :是否持久化 // 參數3 exclusive :僅創建者可以使用的私有隊列,斷開后自動刪除 // 參數4 autoDelete : 當所有消費客戶端連接斷開后,是否自動刪除隊列 // 參數5 arguments channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 發送消息 String message = "Hello World!"; // basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body) // 參數1 exchange :交換器 // 參數2 routingKey : 路由鍵 // 參數3 props : 消息的其他參數 // 參數4 body : 消息體 channel.basicPublish("", QUEUE_NAME, null, message.getBytes()); System.out.println(" [x] Sent '" + message + "'"); // 關閉頻道和連接 channel.close(); connection.close(); } } ~~~ 聲明隊列是冪等的, 隊列只會在它不存在時才會被創建,多次聲明并不會重復創建。消息內容是一個字節數組,也就意味著可以傳遞任何數據。 ### 接受端 這就是我們的消費者。它不斷等待消息隊列推送消息,然后在控制臺輸出。 ~~~java public class Recv { private final static String QUEUE_NAME = "hello"; public static void main(String[] args) throws IOException, TimeoutException { // 創建連接 ConnectionFactory factory = new ConnectionFactory(); // 設置 RabbitMQ 的主機名 factory.setHost("localhost"); // 創建一個連接 Connection connection = factory.newConnection(); // 創建一個通道 Channel channel = connection.createChannel(); // 指定一個隊列 // queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments) // 參數1 queue :隊列名 // 參數2 durable :是否持久化 // 參數3 exclusive :僅創建者可以使用的私有隊列,斷開后自動刪除 // 參數4 autoDelete : 當所有消費客戶端連接斷開后,是否自動刪除隊列 // 參數5 arguments channel.queueDeclare(QUEUE_NAME, false, false, false, null); System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); // 創建隊列消費者 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(" [x] Received '" + message + "'"); } }; // basicConsume(String queue, boolean autoAck, Consumer callback) // 參數1 queue :隊列名 // 參數2 autoAck : 是否自動ACK // 參數3 callback : 消費者對象的一個接口,用來配置回調 channel.basicConsume(QUEUE_NAME, true, consumer); } } ~~~ ## 源代碼 > 相關示例完整代碼:[https://github.com/lianggzone/rabbitmq-action](https://github.com/lianggzone/rabbitmq-action)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看