成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

2023年再不會(huì)RabbitMQ,就要被淘汰了,手把手帶你飛

開(kāi)發(fā) 架構(gòu)
本文是一個(gè)入門(mén)級(jí)別的指南,希望能夠幫助讀者更好地理解和應(yīng)用Spring Cloud和消息隊(duì)列技術(shù)。如果您想深入學(xué)習(xí)和了解更多高級(jí)主題,可以參考官方文檔和其他在線資源。

大家好,我是哪吒。

Spring Cloud是一個(gè)開(kāi)源框架,用于構(gòu)建基于微服務(wù)架構(gòu)的應(yīng)用程序。它提供了多種工具和技術(shù),用于實(shí)現(xiàn)各種微服務(wù)模式,并使它們易于管理和部署。

MQ(消息隊(duì)列)則是一種重要的異步通信機(jī)制,用于在不同的應(yīng)用程序之間進(jìn)行通信。

在本篇博客中,我們將詳細(xì)講解如何使用Spring Cloud搭建MQ。

一、什么是Spring Cloud?

Spring Cloud是一個(gè)基于Spring Framework的開(kāi)源框架,用于構(gòu)建基于微服務(wù)架構(gòu)的應(yīng)用程序。它為開(kāi)發(fā)人員提供了一套工具和技術(shù),可以輕松地實(shí)現(xiàn)和管理各種微服務(wù)模式。

Spring Cloud提供了各種解決方案,包括服務(wù)發(fā)現(xiàn)、配置管理、負(fù)載均衡、斷路器、API網(wǎng)關(guān)等,使得開(kāi)發(fā)人員能夠輕松地創(chuàng)建和管理微服務(wù)。

圖片

上圖說(shuō)明了以下過(guò)程:

  1. 客戶端(Client)向EurekaServer注冊(cè)微服務(wù);
  2. 客戶端從ConfigServer獲取其配置;
  3. 客戶端向目標(biāo)微服務(wù)(Service)發(fā)送請(qǐng)求;
  4. 服務(wù)端在ZipkinServer生成跟蹤ID并將其返回給客戶端;
  5. 服務(wù)端處理請(qǐng)求,并將跟蹤ID發(fā)送回客戶端;
  6. 客戶端接收到響應(yīng)并完成請(qǐng)求。

二、什么是MQ?

MQ(消息隊(duì)列)是一種重要的異步通信機(jī)制,用于在不同的應(yīng)用程序之間進(jìn)行通信。

它允許應(yīng)用程序之間的異步通信,可以提高應(yīng)用程序的可伸縮性和可靠性。

MQ通常由生產(chǎn)者、消費(fèi)者和消息隊(duì)列組成,其中生產(chǎn)者將消息發(fā)送到消息隊(duì)列,消費(fèi)者從消息隊(duì)列中接收消息并對(duì)其進(jìn)行處理。

MQ還提供了一些高級(jí)功能,如消息持久性、事務(wù)支持、消息?路由和過(guò)濾器等

生產(chǎn)者和消費(fèi)者之間的交互過(guò)程:

圖片

生產(chǎn)者通過(guò)交換器將消息發(fā)送到RabbitMQ,RabbitMQ將消息發(fā)送到隊(duì)列,消費(fèi)者從隊(duì)列中獲取消息并處理它。

最后,RabbitMQ將消息發(fā)送給消費(fèi)者。

三、使用Spring Cloud搭建MQ

1、準(zhǔn)備工作

在開(kāi)始搭建MQ之前,我們需要進(jìn)行一些準(zhǔn)備工作。

首先,我們需要安裝RabbitMQ服務(wù)器,并確保其已啟動(dòng)。

其次,我們需要確保已安裝Spring Boot和Spring Cloud,并已將它們添加到項(xiàng)目依賴中。

最后,我們需要?jiǎng)?chuàng)建一個(gè)Spring Boot項(xiàng)目,以便我們可以開(kāi)始編寫(xiě)代碼。

2、添加依賴項(xiàng)

在開(kāi)始編寫(xiě)代碼之前,我們需要添加一些必要的依賴項(xiàng)。在pom.xml文件中添加以下依賴項(xiàng):

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

這將使我們能夠使用Spring Cloud Stream,它是Spring Cloud用于構(gòu)建消息驅(qū)動(dòng)微服務(wù)的解決方案。

3、配置RabbitMQ

在我們可以開(kāi)始使用RabbitMQ之前,我們需要配置它。我們可以在application.properties文件中添加以下屬性:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

這些屬性指定了RabbitMQ服務(wù)器的主機(jī)名、端口號(hào)、用戶名和密碼

4、創(chuàng)建生產(chǎn)者

現(xiàn)在我們已經(jīng)準(zhǔn)備好了,我們可以開(kāi)始編寫(xiě)代碼了。

首先,我們將創(chuàng)建一個(gè)生產(chǎn)者,它將發(fā)送消息到RabbitMQ消息隊(duì)列。

以下是一個(gè)簡(jiǎn)單的生產(chǎn)者實(shí)現(xiàn):

import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class Producer implements CommandLineRunner {

@Autowired
private RabbitTemplate rabbitTemplate;

@Override
public void run(String... args) throws Exception {
String message = "Hello RabbitMQ!";
rabbitTemplate.convertAndSend("myExchange", "myRoutingKey", message.getBytes());
System.out.println("Sent message: " + message);
}
}

在這個(gè)例子中,我們使用了Spring Boot的CommandLineRunner接口來(lái)定義我們的生產(chǎn)者。

在run()方法中,我們使用RabbitTemplate來(lái)發(fā)送消息到名為"myExchange"的交換器,并使用??myRoutingKey路由鍵??。我們還打印了發(fā)送的消息以供參考。

5、創(chuàng)建消費(fèi)者

接下來(lái),我們將創(chuàng)建一個(gè)消費(fèi)者,它將從RabbitMQ消息隊(duì)列中接收消息并對(duì)其進(jìn)行處理。以下是一個(gè)簡(jiǎn)單的消費(fèi)者實(shí)現(xiàn):

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class Consumer {

@RabbitListener(queues = "myQueue")
public void processMessage(byte[] message) {
String text = new String(message);
System.out.println("Received message: " + text);
}
}

在這個(gè)例子中,我們使用了Spring Boot的RabbitListener注解來(lái)定義我們的消費(fèi)者。processMessage()方法將接收到的字節(jié)數(shù)組轉(zhuǎn)換為字符串,并打印出接收到的消息。

6、配置消息隊(duì)列

在我們可以測(cè)試我們的生產(chǎn)者和消費(fèi)者之前,我們需要配置消息隊(duì)列。在Spring Boot中,我們可以使用注解來(lái)定義消息隊(duì)列。以下是我們需要在應(yīng)用程序中添加的注解:

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {

@Bean
public Queue myQueue() {
return new Queue("myQueue", false);
}
}

在這個(gè)例子中,我們使用了@Configuration注解來(lái)定義我們的配置類(lèi)。我們還使用@Bean注解來(lái)定義名為myQueue的消息隊(duì)列。

7、測(cè)試應(yīng)用程序

現(xiàn)在我們已經(jīng)完成了所有的設(shè)置和配置,可以測(cè)試我們的應(yīng)用程序了。運(yùn)行應(yīng)用程序并檢查控制臺(tái)輸出,確保生產(chǎn)者已成功發(fā)送消息并且消費(fèi)者已成功接收并處理消息。

四、高級(jí)配置

Spring Cloud還提供了一些高級(jí)配置選項(xiàng),可以幫助我們更好地管理和控制消息隊(duì)列。例如,我們可以使用以下注解來(lái)定義交換器和路由鍵:

1、交換器的定義和使用

在Spring Cloud中,交換器是用于將消息路由到正確的隊(duì)列的組件。交換器將收到的消息根據(jù)規(guī)則進(jìn)行路由,并將其發(fā)送到匹配的隊(duì)列。

下圖,展示了定義交換器的過(guò)程:

圖片

在Spring Boot應(yīng)用程序中,我們可以使用ExchangeBuilder來(lái)創(chuàng)建交換器。

下圖展示了交換器的使用過(guò)程:

圖片

上圖說(shuō)明了以下過(guò)程:

  1. 生產(chǎn)者向交換器發(fā)送消息。
  2. 交換器根據(jù)規(guī)則將消息路由到隊(duì)列1和隊(duì)列2。
  3. 隊(duì)列1將確認(rèn)消息發(fā)送給交換器。
  4. 交換器將確認(rèn)消息發(fā)送給生產(chǎn)者,告訴它消息已經(jīng)成功路由到了隊(duì)列。

在這個(gè)例子中,我們將使用Spring Cloud的ExchangeBuilder來(lái)創(chuàng)建一個(gè)名為myExchange的直接交換器:

@Bean
public Exchange myExchange() {
return ExchangeBuilder.directExchange("myExchange").durable(true).build();
}

在這個(gè)例子中,我們使用了@Bean注解來(lái)定義名為"myExchange"的直接交換器。我們還使用了durable(true)選項(xiàng)來(lái)使交換器持久化,這樣即使在RabbitMQ服務(wù)器關(guān)閉后也能保留交換器。

2、定義隊(duì)列

以下是創(chuàng)建兩個(gè)隊(duì)列的示例代碼,一個(gè)用于普通消息,一個(gè)用于重要消息:

圖片

在代碼中,我們使用了 @Bean 注解來(lái)定義 myQueue 和 importantQueue 兩個(gè)隊(duì)列。我們將 durable 參數(shù)設(shè)置為 false,這表示隊(duì)列是非持久化的,當(dāng) RabbitMQ 服務(wù)器關(guān)閉時(shí),隊(duì)列中的消息將會(huì)丟失。

@Bean
public Queue myQueue() {
return new Queue("myQueue", false);
}

@Bean
public Queue importantQueue() {
return new Queue("importantQueue", false);
}

通過(guò)使用這些隊(duì)列,我們可以將消息發(fā)送到相應(yīng)的隊(duì)列并讓消費(fèi)者從隊(duì)列中接收消息。

3、定義綁定

在這個(gè)例子中,我們將定義綁定,將交換器和隊(duì)列連接起來(lái)。以下是我們需要在應(yīng)用程序中添加的注解:

@Bean
public Binding myBinding() {
return BindingBuilder.bind(myQueue()).to(myExchange()).with("myRoutingKey").noargs();
}

@Bean
public Binding importantBinding() {
return BindingBuilder.bind(importantQueue()).to(myExchange()).with("importantRoutingKey").noargs();
}

在這個(gè)例子中,我們使用了@Bean注解來(lái)定義名為"myBinding"和"importantBinding"的兩個(gè)綁定。我們還使用了with()選項(xiàng)來(lái)指定路由鍵,以便將消息發(fā)送到正確的隊(duì)列。

圖片

應(yīng)用程序首先添加了綁定的注解,然后綁定將隊(duì)列和交換器連接起來(lái)。綁定還指定了路由鍵,以便將消息發(fā)送到正確的隊(duì)列。

一旦綁定成功,應(yīng)用程序就可以向交換器發(fā)送消息。交換器會(huì)根據(jù)路由鍵將消息路由到正確的隊(duì)列中。隊(duì)列最后將消息發(fā)送回應(yīng)用程序,應(yīng)用程序收到消息并處理。

4、配置RabbitMQ連接

在這個(gè)例子中,我們還需要配置RabbitMQ連接,以便我們的應(yīng)用程序可以與RabbitMQ服務(wù)器通信。以下是我們需要在應(yīng)用程序中添加的屬性:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

在這個(gè)例子中,我們使用了Spring Boot的屬性文件來(lái)配置RabbitMQ連接。我們指定了RabbitMQ服務(wù)器的主機(jī)名、端口號(hào)、用戶名和密碼。

5、測(cè)試應(yīng)用程序

現(xiàn)在我們已經(jīng)完成了所有的設(shè)置和配置,可以測(cè)試我們的應(yīng)用程序了。運(yùn)行應(yīng)用程序并檢查控制臺(tái)輸出,確保生產(chǎn)者已成功發(fā)送消息并且消費(fèi)者已成功接收并處理消息。還要確保消息已正確地路由到相應(yīng)的隊(duì)列中。

五、總結(jié)

在本文中,我們介紹了RabbitMQ作為消息代理的基本概念,包括交換器、隊(duì)列、綁定和路由鍵等。

我們還介紹了Spring Boot如何與RabbitMQ集成,并使用Spring Cloud Stream來(lái)簡(jiǎn)化消息傳輸和處理過(guò)程。

在代碼示例中,我們展示了如何創(chuàng)建生產(chǎn)者和消費(fèi)者,并使用注解來(lái)定義交換器、隊(duì)列和綁定。我們還演示了如何配置RabbitMQ連接,并測(cè)試了應(yīng)用程序的正確性和可靠性。

總的來(lái)說(shuō),本文是一個(gè)入門(mén)級(jí)別的指南,希望能夠幫助讀者更好地理解和應(yīng)用Spring Cloud和消息隊(duì)列技術(shù)。如果您想深入學(xué)習(xí)和了解更多高級(jí)主題,可以參考官方文檔和其他在線資源。

本文轉(zhuǎn)載自微信公眾號(hào)「哪吒編程」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系哪吒編程公眾號(hào)。

責(zé)任編輯:姜華 來(lái)源: 哪吒編程
相關(guān)推薦

2023-05-04 10:09:00

Kubernetes微服務(wù)

2019-12-20 09:32:02

人工智能程序員軟件

2023-03-29 10:02:36

2023-01-30 09:27:57

開(kāi)發(fā)自動(dòng)化配置

2022-08-11 07:32:51

Starter自動(dòng)裝配

2010-10-28 10:30:16

云計(jì)算關(guān)系數(shù)據(jù)庫(kù)

2021-04-25 14:56:18

開(kāi)發(fā)技能代碼

2019-07-06 10:18:07

人工智能

2023-01-12 22:06:52

JVMGraalVMSpring

2021-12-15 07:24:57

人工神經(jīng)網(wǎng)絡(luò)翻譯

2022-11-07 18:36:03

組件RPC框架

2020-01-03 09:40:16

Windows 7Windows 10Windows

2012-04-06 08:22:01

股票

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機(jī)

2025-05-07 00:31:30

2020-09-08 07:37:44

springBoot MQ rabbitMQ

2015-04-23 10:51:13

iOSpython

2015-04-23 09:29:05

iOSpython

2021-07-14 09:00:00

JavaFX開(kāi)發(fā)應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩欧美精品一区 | 电影91久久久 | 一区二区久久 | 国产精品视频播放 | 狠狠久 | 久久a久久 | 日韩欧美中文字幕在线视频 | 日韩综合一区 | 亚洲精品视频在线看 | 91视视频在线观看入口直接观看 | 国产综合欧美 | 精品一二三区 | 国产精品18久久久 | 精品国产视频 | 欧美一区二区三区在线视频 | 亚洲视频精品 | 亚洲精品国产偷自在线观看 | 亚洲成av人影片在线观看 | 91精品国产综合久久久久久丝袜 | 国产原创在线观看 | 国产乱码精品一区二区三区中文 | 国产成人一区二区三区 | 日韩中文字幕在线免费 | 中文字幕1区2区3区 日韩在线视频免费观看 | 成年人黄色一级片 | 欧美高清视频在线观看 | 一区二区三区视频在线 | 国产精品永久久久久久久www | 一区二区三区福利视频 | 日韩久久久一区二区 | 精品一区二区久久久久久久网站 | 亚洲国内精品 | 日韩一区二区三区在线观看视频 | 日韩综合网 | 国产精品成人在线播放 | 日韩午夜网站 | 九九九久久国产免费 | 国产一区二区三区久久久久久久久 | 国产日韩一区二区 | 91嫩草精品 | 看a网站 |