七、Spring Cloud Bus

一、簡介

Spring cloud bus,消息總線,通過輕量消息代理連接各個分佈的節點。它可以用於廣播配置文件的更改或者服務之間的通訊,也可以用於監控。

二、搭建服務

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>mo-cloud</artifactId>
        <groupId>com.mo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>bus</artifactId>
    <description>消息總線服務</description>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>


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

        <!-- 引入消息總線的依賴,此處引入rabbitmq的依賴 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
    </dependencies>

</project>
# bootstrap.yml
server:
  port: 0
spring:
  application:
    name: bus
  # rabbitmq的配置信息
  rabbitmq:
    addresses: 127.0.0.1
    port: 5672
    username: guest
    password: guest
  cloud:
    config:
      discovery:
        service-id: config-cluster
        enabled: true
      label: master
      profile: default
    # 開啓消息總線
    bus:
      enabled: true
      trace:
        enabled: true
# actuator 安全檢查開放消息推送刷新
management:
  endpoints:
    web:
      exposure:
        include:
          # 開放安全檢查的端點,bus-refresh端點爲推送刷新配置文件的端點
          - "info"
          - "health"
          - "bus-refresh"
eureka:
  client:
    service-url:
      default-zone: http://127.0.0.1:8761/eureka/
  instance:
    instance-id: ${spring.application.name}:${random.int}
    prefer-ip-address: true
package com.mo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * RefreshScope註解,spring cloud提供的一種特殊的scope實現,用來實現配置、實例熱加載
 *
 * @author x.pan
 * @email [email protected]
 * @date 2020/4/16 22:57
 */
@RefreshScope
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class BusApplication {
    public static void main(String[] args) {
        SpringApplication.run(BusApplication.class, args);
    }

    @Value("${bus.news}")
    private String news;

    /**
     * 修改遠端配置文件,並使用健康檢查的推送接口,是spring cloud進行熱部署
     * <p></p>
     * http://127.0.0.1:58299/actuator/bus-refresh
     * post請求,header爲application/json
     *
     * @return
     */
    @GetMapping("/getNews")
    public String getNews() {
        return news;
    }
}
import org.junit.Test;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;

/**
 * 單元測試
 *
 * @author x.pan
 * @email [email protected]
 * @date 2020/4/24 0:29
 */
public class ActuatorRefresh {


    /**
     * 健康檢查的推送接口
     * http://127.0.0.1:58299/actuator/bus-refresh
     * <p>
     * 運行單元測試,進行訪問接口,推送消息,進行熱部署
     */
    @Test
    public void refresh() {
        // 注意修改端口
        int port = 0;
        String url = "http://127.0.0.1:" + port + "/actuator/bus-refresh";
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
        HttpEntity<String> requestEntity = new HttpEntity<>(requestHeaders);
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.postForEntity(url, requestEntity, String.class);
    }
}

 

 

 

 

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