亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud之消息總線Spring Cloud Bus實例代碼

發布時間:2020-08-21 18:56:13 來源:腳本之家 閱讀:193 作者:smartdt 欄目:編程語言

一、簡介

在微服務架構的系統中,我們通常會使用輕量級的消息代理來構建一個共用的消息主題讓系統中所有微服務實例都連接上來,由于該主題中產生的消息會被所有實例監聽和消費,所以我們稱它為消息總線。

二、消息代理

消息代理(Message Broker)是一種消息驗證、傳輸、路由的架構模式。它在應用程序之間起到通信調度并最小化應用之間的依賴的作用,使得應用程序可以高效地解耦通信過程。消息代理是一個中間件產品,它的核心是一個消息的路由程序,用來實現接收和分發消息, 并根據設定好的消息處理流來轉發給正確的應用。 它包括獨立的通信和消息傳遞協議,能夠實現組織內部和組織間的網絡通信。設計代理的目的就是為了能夠從應用程序中傳入消息,并執行一些特別的操作,下面這些是在企業應用中,我們經常需要使用消息代理的場景:

  1. 將消息路由到一個或多個目的地。
  2. 消息轉化為其他的表現方式。
  3. 執行消息的聚集、消息的分解,并將結果發送到它們的目的地,然后重新組合響應返回給消息用戶。
  4. 調用Web服務來檢索數據。
  5. 響應事件或錯誤。
  6. 使用發布-訂閱模式來提供內容或基千主題的消息路由。

目前已經有非常多的開源產品可以供大家使用, 比如:

  1. ActiveMQKafka
  2. RabbitMQ
  3. RocketMQ
  4. 等......

三、SpringCloud+RabbitMQ

(1)RabbitMQ簡介、安裝不贅述。

(2)pom.xml

<dependencies> 
 <dependency> 
 <groupId>org.springframework.boot</groupId> 
 <artifactId>spring-boot-starter-amqp</artifactId> 
 </dependency> 
 
 <dependency> 
 <groupId>org.springframework.boot</groupId> 
 <artifactId>spring-boot-starter-test</artifactId> 
 <scope>test</scope> 
 </dependency> 
</dependencies> 

(3)application.yml

spring: 
 application: 
 name: rabbitmq-hello 
 rabbitmq: 
 host: ***.***.***.*** 
 port: 5672 
 username: guest 
 password: guest 

(4)發送者Sender

@Component 
public class Sender { 
 
 private static final Logger log = LoggerFactory.getLogger(Sender.class); 
 @Autowired 
 private AmqpTemplate amqpTemplate; 
 
 public void send() { 
 String context = "hello " + new Date(); 
 log.info("Sender : " + context); 
 this.amqpTemplate.convertAndSend("hello", context); 
 } 
} 

(5)接受者Receiver

@Component 
@RabbitListener(queues = "hello") 
public class Receiver { 
 
 private static final Logger log = LoggerFactory.getLogger(Receiver.class); 
 
 @RabbitHandler 
 public void process(String hello) { 
 log.info("Receiver : " + hello); 
 } 
} 

(6)創建RabbitMQ的配置類 RabbitConfig

@Configuration 
public class RabbitConfig { 
 
 @Bean 
 public Queue helloQueue(){ 
 return new Queue("hello"); 
 } 
} 

(7)創建單元測試類, 用來調用消息生產

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = SpringcloudbusrabbitmqApplication.class) 
public class HelloApplicationTests { 
 
 @Autowired 
 private Sender sender; 
 
 @Test 
 public void hello() throws Exception { 
 sender.send(); 
 } 
} 

(8)測試,執行HelloApplicationTests

SpringCloud之消息總線Spring Cloud Bus實例代碼

(9)訪問host:15672

SpringCloud之消息總線Spring Cloud Bus實例代碼

四、改造Config-Client(整合springcloud bus)

(1)pom.xml

<dependencies> 
 <dependency> 
 <groupId>org.springframework.cloud</groupId> 
 <artifactId>spring-cloud-starter-config</artifactId> 
 </dependency> 
 <dependency> 
 <groupId>org.springframework.boot</groupId> 
 <artifactId>spring-boot-starter-web</artifactId> 
 </dependency> 
 <dependency> 
 <groupId>org.springframework.cloud</groupId> 
 <artifactId>spring-cloud-starter-eureka</artifactId> 
 </dependency> 
 <dependency> 
 <groupId>org.springframework.cloud</groupId> 
 <artifactId>spring-cloud-starter-bus-amqp</artifactId> 
 </dependency> 
 <dependency> 
 <groupId>org.springframework.boot</groupId> 
 <artifactId>spring-boot-starter-actuator</artifactId> 
 </dependency> 
 
 <dependency> 
 <groupId>org.springframework.boot</groupId> 
 <artifactId>spring-boot-starter-test</artifactId> 
 <scope>test</scope> 
 </dependency> 
</dependencies> 

(2)bootstrap.properties

spring.application.name=configspace 
spring.cloud.config.label=master 
spring.cloud.config.profile=dev 
spring.cloud.config.uri= http://localhost:5588/ 
eureka.client.serviceUrl.defaultZone=http://localhost:5555/eureka/ 
 
server.port=5589 
 
spring.rabbitmq.host=118.89.237.88 
spring.rabbitmq.port= 5672 
spring.rabbitmq.username=guest 
spring.rabbitmq.password=guest 
 
management.security.enabled=false 

(3)其他不用改變

五、測試

(1)測試準備

一個服務注冊中心,EUREKASERVER,端口為5555;

一個分布式配置中心,ConfigServer,端口為5588;

二個分布式配置,ConfigClient,端口為5589、5590;(2)訪問http://localhost:5589/from

SpringCloud之消息總線Spring Cloud Bus實例代碼

(3)訪問http://localhost:5590/from

SpringCloud之消息總線Spring Cloud Bus實例代碼

RabbitMQ:

SpringCloud之消息總線Spring Cloud Bus實例代碼

(4)去倉庫修改password的值

from=git-dev-v1.0 by springcloud config-server 
username=springcloud 
password=1234567890 

(5)POST請求http://localhost:5589/bus/refresh或者http://localhost:5590/bus/refresh

SpringCloud之消息總線Spring Cloud Bus實例代碼

成功請求后config-client會重新讀取配置文件

SpringCloud之消息總線Spring Cloud Bus實例代碼

(6)再次訪問

  1. 如果POST請求的是:http://localhost:5589/bus/refresh,請訪問http://localhost:5590/from
  2. 如果訪問出現401,則配置需要加上management.security.enabled=false

SpringCloud之消息總線Spring Cloud Bus實例代碼

如果POST請求的是:http://localhost:5590/bus/refresh,請訪問http://localhost:5589/from

SpringCloud之消息總線Spring Cloud Bus實例代碼

另/bus/refresh接口可以指定服務,即使用“username”參數,比如 “/bus/refresh?destination=username:**”即刷新服務名為username的所有服務,不管ip地址。

(7)架構

SpringCloud之消息總線Spring Cloud Bus實例代碼

(8)架構調整

既然SpringCloud Bus的/bus/refresh接口提供了針對服務和實例進行配置更新的參數,那么我們的架構也可以相應做出一些調整。在之前的架構中,服務的配置更新需要通過向具體服務中的某個實例發送請求,再觸發對整個服務集群的配置更新。雖然能實現功能,但是這樣的結果是,我們指定的應用實例會不同千集群中的其他應用實例,這樣會增加集群內部的復雜度,不利于將來的運維工作。比如, 需要對服務實例進行遷移,那么我們不得不修改Web Hook中的配置等。所以要盡可能地讓服務集群中的各個節點是對等的。

因此, 我們將之前的架構做了 一些調整, 如下圖所示:

SpringCloud之消息總線Spring Cloud Bus實例代碼

主要做了以下這些改動:

  1. 在ConfigServer中也引入SpringCloud Bus,將配置服務端也加入到消息總線中來。
  2. /bus/refresh請求不再發送到具體服務實例上,而是發送給Config Server,并通過des巨nation參數來指定需要更新配置的服務或實例。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凤庆县| 神木县| 缙云县| 林甸县| 六安市| 磐石市| 株洲市| 海宁市| 美姑县| 康平县| 获嘉县| 同心县| 铜山县| 中江县| 琼结县| 广平县| 沭阳县| 彭泽县| 长葛市| 安阳县| 石阡县| 济宁市| 丰都县| 封丘县| 禹城市| 双城市| 和田县| 阳谷县| 阿鲁科尔沁旗| 弋阳县| 南汇区| 四平市| 黄龙县| 绥宁县| 丹凤县| 太仆寺旗| 湄潭县| 朔州市| 天等县| 民和| 威远县|