日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何使用Spring和RabbitMQ創(chuàng)建一個簡單的發(fā)布和訂閱應(yīng)用程序?

你將建造什么

您將構(gòu)建一個應(yīng)用程序,該應(yīng)用程序使用 Spring AMQP 發(fā)布消息RabbitTemplate并使用MessageListenerAdapter.

創(chuàng)新互聯(lián)公司為您提適合企業(yè)的網(wǎng)站設(shè)計?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強(qiáng)的網(wǎng)絡(luò)競爭力!結(jié)合企業(yè)自身,進(jìn)行網(wǎng)站設(shè)計及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到成都網(wǎng)站設(shè)計、做網(wǎng)站, 我們的網(wǎng)頁設(shè)計師為您提供的解決方案。

你需要什么

  • 約15分鐘
  • 最喜歡的文本編輯器或 IDE
  • JDK 11或更高版本
  • Gradle 4+或Maven 3.2+
  • 您還可以將代碼直接導(dǎo)入 IDE:彈簧工具套件 (STS)IntelliJ IDEA設(shè)置 RabbitMQ 服務(wù)器。請參閱設(shè)置 RabbitMQ 代理。

如何完成本指南

像大多數(shù) Spring入門指南一樣,您可以從頭開始并完成每個步驟,也可以繞過您已經(jīng)熟悉的基本設(shè)置步驟。無論哪種方式,您最終都會得到工作代碼。

要從頭開始,請繼續(xù)設(shè)置 RabbitMQ 代理。

要跳過基礎(chǔ)知識,請執(zhí)行以下操作:

  • 下載并解壓本指南的源代碼庫,或使用Git克隆它:git clone https://github.com/spring-guides/gs-messaging-rabbitmq.git
  • 光盤進(jìn)入gs-messaging-rabbitmq/initial
  • 跳轉(zhuǎn)到從 Spring Initializr 開始。

完成后,您可以對照中的代碼檢查結(jié)果

gs-messaging-rabbitmq/complete。

設(shè)置 RabbitMQ 代理

在構(gòu)建消息傳遞應(yīng)用程序之前,您需要設(shè)置一個服務(wù)器來處理接收和發(fā)送消息。

RabbitMQ 是一個 AMQP 服務(wù)器。該服務(wù)器可在

https://www.rabbitmq.com/download.html免費(fèi)獲得。您可以手動下載它,或者,如果您使用帶有 Homebrew 的 Mac,則可以在終端窗口中運(yùn)行以下命令:

brew install rabbitmq

通過在終端窗口中運(yùn)行以下命令,解壓縮服務(wù)器并使用默認(rèn)設(shè)置啟動它:

rabbitmq-server

您應(yīng)該會看到類似于以下內(nèi)容的輸出:

         RabbitMQ 3.1.3. Copyright (C) 2007-2013 VMware, Inc.
## ## Licensed under the MPL. See https://www.rabbitmq.com/
## ##
########## Logs: /usr/local/var/log/rabbitmq/rabbit@localhost.log
###### ## /usr/local/var/log/rabbitmq/rabbit@localhost-sasl.log
##########
Starting broker... completed with 6 plugins.

如果您在本地運(yùn)行 Docker,您還可以使用Docker Compose快速啟動 RabbitMQ 服務(wù)器。Github 項(xiàng)目docker-compose.yml的根目錄中有一個。complete這非常簡單,如下面的清單所示:

rabbitmq:
image: rabbitmq:management
ports:
- "5672:5672"
- "15672:15672"

使用當(dāng)前目錄中的此文件,您可以運(yùn)行docker-compose up以使 RabbitMQ 在容器中運(yùn)行。

從 Spring Initializr 開始

您可以使用這個預(yù)先初始化的項(xiàng)目并單擊 Generate 下載 ZIP 文件。此項(xiàng)目配置為適合本教程中的示例。

手動初始化項(xiàng)目:

  1. 導(dǎo)航到https://start.spring.io。該服務(wù)提取應(yīng)用程序所需的所有依賴項(xiàng),并為您完成大部分設(shè)置。
  2. 選擇 Gradle 或 Maven 以及您要使用的語言。本指南假定您選擇了 Java。
  3. 單擊Dependencies并為 RabbitMQ 選擇Spring。
  4. 單擊生成。
  5. 下載生成的 ZIP 文件,該文件是根據(jù)您的選擇配置的 Web 應(yīng)用程序的存檔。

如果您的 IDE 具有 Spring Initializr 集成,您可以從您的 IDE 完成此過程。

你也可以從 Github 上 fork 項(xiàng)目并在你的 IDE 或其他編輯器中打開它。

創(chuàng)建 RabbitMQ 消息接收器

對于任何基于消息傳遞的應(yīng)用程序,您都需要創(chuàng)建一個響應(yīng)已發(fā)布消息的接收器。以下清單(來自

src/main/java/com.example.messagingrabbitmq/Receiver.java)顯示了如何執(zhí)行此操作:

package com.example.messagingrabbitmq;

import java.util.concurrent.CountDownLatch;
import org.springframework.stereotype.Component;

@Component
public class Receiver {

private CountDownLatch latch = new CountDownLatch(1);

public void receiveMessage(String message) {
System.out.println("Received <" + message + ">");
latch.countDown();
}

public CountDownLatch getLatch() {
return latch;
}

}

這Receiver是一個 POJO,它定義了接收消息的方法。當(dāng)您注冊它以接收消息時,您可以將其命名為任何您想要的名稱。

為了方便起見,這個 POJO 也有一個CountDownLatch. 這讓它發(fā)出已收到消息的信號。這是您不太可能在生產(chǎn)應(yīng)用程序中實(shí)現(xiàn)的東西。

注冊監(jiān)聽器并發(fā)送消息

Spring AMQPRabbitTemplate提供了使用 RabbitMQ 發(fā)送和接收消息所需的一切。但是,您需要:

  • 配置消息偵聽器容器。
  • 聲明隊(duì)列、交換器以及它們之間的綁定。
  • 配置一個組件發(fā)送一些消息來測試監(jiān)聽器。

Spring Boot 會自動創(chuàng)建連接工廠和 RabbitTemplate,從而減少您必須編寫的代碼量。

您將使用RabbitTemplate來發(fā)送消息,并且您將Receiver使用消息偵聽器容器注冊一個以接收消息。連接工廠驅(qū)動兩者,讓它們連接到 RabbitMQ 服務(wù)器。以下清單(來自

src/main/java/com.example.messagingrabbitmq/MessagingRabbitApplication.java)顯示了如何創(chuàng)建應(yīng)用程序類:

package com.example.messagingrabbitmq;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class MessagingRabbitmqApplication {

static final String topicExchangeName = "spring-boot-exchange";

static final String queueName = "spring-boot";

@Bean
Queue queue() {
return new Queue(queueName, false);
}

@Bean
TopicExchange exchange() {
return new TopicExchange(topicExchangeName);
}

@Bean
Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("foo.bar.#");
}

@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(queueName);
container.setMessageListener(listenerAdapter);
return container;
}

@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}

public static void main(String[] args) throws InterruptedException {
SpringApplication.run(MessagingRabbitmqApplication.class, args).close();
}

}

@SpringBootApplication是一個方便的注釋,它添加了以下所有內(nèi)容:

  • @Configuration: 將類標(biāo)記為應(yīng)用程序上下文的 bean 定義源。
  • @EnableAutoConfiguration:告訴 Spring Boot 根據(jù)類路徑設(shè)置、其他 bean 和各種屬性設(shè)置開始添加 bean。例如,如果spring-webmvc位于類路徑上,則此注釋將應(yīng)用程序標(biāo)記為 Web 應(yīng)用程序并激活關(guān)鍵行為,例如設(shè)置DispatcherServlet.
  • @ComponentScan: 告訴 Spring 在包中查找其他組件、配置和服務(wù)com/example,讓它找到控制器。

該main()方法使用 Spring Boot 的SpringApplication.run()方法來啟動應(yīng)用程序。您是否注意到?jīng)]有一行 XML?也沒有web.xml文件。這個 Web 應(yīng)用程序是 100% 純 Java,您不必處理任何管道或基礎(chǔ)設(shè)施的配置。

方法中定義的 beanlistenerAdapter()被注冊為容器中的消息監(jiān)聽器(定義在 中container())。它偵聽spring-boot隊(duì)列中的消息。因?yàn)镽eceiver該類是 POJO,所以需要將其包裝在 中MessageListenerAdapter,您可以在其中指定它調(diào)用receiveMessage.

JMS 隊(duì)列和 AMQP 隊(duì)列具有不同的語義。例如,JMS 僅將排隊(duì)的消息發(fā)送給一個消費(fèi)者。雖然 AMQP 隊(duì)列做同樣的事情,但 AMQP 生產(chǎn)者并不直接將消息發(fā)送到隊(duì)列。相反,一條消息被發(fā)送到一個交換器,該交換器可以發(fā)送到單個隊(duì)列或扇出到多個隊(duì)列,模擬 JMS 主題的概念。

消息偵聽器容器和接收器 bean 是您偵聽消息所需的全部內(nèi)容。要發(fā)送消息,您還需要一個 Rabbit 模板。

該queue()方法創(chuàng)建一個 AMQP 隊(duì)列。該exchange()方法創(chuàng)建主題交換。該方法將這兩者綁定在一起,定義發(fā)布到交換binding()時發(fā)生的行為。RabbitTemplate

Spring AMQP 要求將Queue、TopicExchange和Binding聲明為頂級 Spring bean 以便正確設(shè)置。

在這種情況下,我們使用主題交換,并且隊(duì)列與路由鍵綁定foo.bar.#,這意味著以 開頭的路由鍵發(fā)送的任何消息都會foo.bar.被路由到隊(duì)列。

發(fā)送測試消息

在此示例中,測試消息由 a 發(fā)送CommandLineRunner,它還等待接收器中的閂鎖并關(guān)閉應(yīng)用程序上下文。以下清單(來自

src/main/java/com.example.messagingrabbitmq/Runner.java)顯示了它是如何工作的:

package com.example.messagingrabbitmq;

import java.util.concurrent.TimeUnit;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class Runner implements CommandLineRunner {

private final RabbitTemplate rabbitTemplate;
private final Receiver receiver;

public Runner(Receiver receiver, RabbitTemplate rabbitTemplate) {
this.receiver = receiver;
this.rabbitTemplate = rabbitTemplate;
}

@Override
public void run(String... args) throws Exception {
System.out.println("Sending message...");
rabbitTemplate.convertAndSend(MessagingRabbitmqApplication.topicExchangeName, "foo.bar.baz", "Hello from RabbitMQ!");
receiver.getLatch().await(10000, TimeUnit.MILLISECONDS);
}

}

foo.bar.baz請注意,模板使用與綁定匹配的路由鍵將消息路由到交換器。

在測試中,您可以模擬運(yùn)行器,以便可以單獨(dú)測試接收器。

運(yùn)行應(yīng)用程序

該main()方法通過創(chuàng)建 Spring 應(yīng)用程序上下文來啟動該過程。這將啟動消息偵聽器容器,該容器開始偵聽消息。有一個Runnerbean,然后會自動運(yùn)行。它從應(yīng)用程序上下文中檢索并在隊(duì)列RabbitTemplate中發(fā)送Hello from RabbitMQ!消息。spring-boot最后,它關(guān)閉 Spring 應(yīng)用程序上下文,應(yīng)用程序結(jié)束。

構(gòu)建一個可執(zhí)行的 JAR

您可以使用 Gradle 或 Maven 從命令行運(yùn)行應(yīng)用程序。您還可以構(gòu)建一個包含所有必要依賴項(xiàng)、類和資源的單個可執(zhí)行 JAR 文件并運(yùn)行它。構(gòu)建可執(zhí)行 jar 可以在整個開發(fā)生命周期、跨不同環(huán)境等中輕松地將服務(wù)作為應(yīng)用程序交付、版本化和部署。

如果您使用 Gradle,則可以使用./gradlew bootRun. 或者,您可以使用構(gòu)建 JAR 文件./gradlew build,然后運(yùn)行 JAR 文件,如下所示:

java -jar build/libs/gs-messaging-rabbitmq-0.1.0.jar

如果您使用 Maven,則可以使用./mvnw spring-boot:run. 或者,您可以使用構(gòu)建 JAR 文件,./mvnw clean package然后運(yùn)行該 JAR 文件,如下所示:

java -jar 目標(biāo)/gs-messaging-rabbitmq-0.1.0.jar

此處描述的步驟創(chuàng)建了一個可運(yùn)行的 JAR。您還可以構(gòu)建經(jīng)典的 WAR 文件。

您應(yīng)該看到以下輸出:

   Sending message...
Received 復(fù)制

總結(jié)

恭喜!您剛剛使用 Spring 和 RabbitMQ 開發(fā)了一個簡單的發(fā)布和訂閱應(yīng)用程序。您可以使用Spring 和 RabbitMQ做比這里更多的事情,但本指南應(yīng)該提供一個良好的開端。


分享文章:如何使用Spring和RabbitMQ創(chuàng)建一個簡單的發(fā)布和訂閱應(yīng)用程序?
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/dphjgeh.html