springCloud- Eureka整合配置中心config,并用消息总线发布信息

1.安装RabbitMQ

centos8安装RabbitMQ链接:

centos8安装RabbitMQ_weixin_44919041的博客-CSDN博客

2. parent pom文件配置

pom.xml配置文件如下:

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zhangy.springCloud</groupId>
    <artifactId>zhangy-spring-cloud</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <lombok.version>1.18.22</lombok.version>
        <mysql.version>8.0.28</mysql.version>
        <postgresql.version>42.3.3</postgresql.version>
        <mybatis.spring.boot>2.2.0</mybatis.spring.boot>
        <spring-cloud.version>2021.0.1</spring-cloud.version>
        <alibaba.version>2021.1</alibaba.version>
    </properties>

    <dependencyManagement>

        <dependencies>
            <!--springCloudAlibaba-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>


            <!--springboot 2.6.4-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.6.4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud 2021.0.1 默认负载均衡是采用loadbalancer 没有了ribbon-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.2.0</version>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>

                <dependency>
                    <groupId>org.postgresql</groupId>
                    <artifactId>postgresql</artifactId>
                    <version>${postgresql.version}</version>
                    <scope>runtime</scope>
                </dependency>

        </dependencies>

    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2.springCloud整合Eureka集群注册中心

1.版本说明

SpringBoot版本为2.6.4 SpringCloud版本2021.0.1

2.本地host文件映射

如果使用一台机器搭建集群的话,需要做映射

127.0.0.1  eureka7001.com

127.0.0.1  eureka7002.com

3. pom文件配置

<?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>zhangy-spring-cloud</artifactId>
        <groupId>com.zhangy.springCloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-cloud-eureka02</artifactId>

    <dependencies>

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

    </dependencies>

</project>

4.yml文件配置


spring:
  application:
    name: cloud-eureka-server

server:
  port: 7002
  tomcat:
    uri-encoding: UTF-8
eureka:
  instance:
    hostname: eureka7002.com
  client:
    service-url:
      #注册服务地址
      defaultZone: http://eureka7001.com:7001/eureka
    #fasle表示不向注册中心注册自己
    register-with-eureka: false
    #false表示自己就是注册中心
    fetch-registry: false

5.启动类

@EnableEurekaServer//eureka注册中心服务端
@SpringBootApplication
class EurekaServer02Application {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer02Application.class, args);
    }
}

初始化一个项目,按照上述3.4.5步骤在配置一个,注意yml中的hostname和port端口号需要修改,defaultZone为相互注册的地址

端口为7001的注册中心

 端口为7002的注册中心

 

6.启动两个注册中心 

访问 http://eureka7002.com:7002

 访问http://eureka7001.com:7001

 3.springCloud整合config- server配置中心

 1.版本说明

 SpringBoot版本为2.6.4 SpringCloud版本2021.0.1

2.初始化项目配置pom依赖

<?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>zhangy-spring-cloud</artifactId>
        <groupId>com.zhangy.springCloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <description>springCloud配置服务端</description>
    <artifactId>spring-cloud-config-server</artifactId>

    <dependencies>
        <!--消息总线bus rabbitmq依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</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>com.zhangy.springCloud</groupId>
            <artifactId>spring-cloud-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

3.application.yml配置

server:
  port: 7003

spring:
  application:
    name: cloud-config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/zhangy_123/spring-cloud-config.git
          #搜索目录
          search-paths: /springCloud-config
          username: gitee账号 #用户名
          password: gitee密码 # 密码
          #默认读取主分枝 master dev
          default-label: dev #请求URL中没有指定的时候 默认读取配置的 没有配置读取主分枝master

  rabbitmq:
    host: mq的所在服务器的ip
    port: 5672
    username: admin
    password: admin
eureka:
  instance:
    instance-id: cloud-config-server-7003
    #true表示显示ip
    prefer-ip-address: true
  client:
    #true表示向注册中心注册自己
    register-with-eureka: true
    #true 表示从eureka抓取信息
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka,http://eureka7001.com:7001/eureka
##暴露总线刷新端点
management:
  endpoints:
    web:
      exposure:
        include: 'busrefresh' #2.x的版本是 bus-refresh

4.启动类

/**
 * @author: zhangyou
 * @date: 2022/5/19 1:26 上午
 * @description:
 */
@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class SpringCloudConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConfigServerApplication.class, args);
    }
}

5.在gitee创建一个仓库并添加配置文件

   gitee配置文件的内容:

config: 
   url: jdbc:postgresql://localhost:5432/postgres?useSSL=false
   driverName: org.postgresql.Driver
   userName: postgres
   password: postgres
   env: prod
   version: 22255

6.启动项目并访问

访问地址:http://127.0.0.1:7003/config/prod/master

 注:配置中心读取gitee的方式有以下几种

#读取配置规则
第一种:/{label}/{application}-{profile}.yml  
分支下的文件名  /master/config-dev.yml 
http://127.0.0.1:7003/master/config-dev.yml表示读取master分支的config-dev.yml
http://127.0.0.1:7003/dev/config-dev.yml表示读取dev分支的config-prod.yml
第二种:/{application}-{profile}.yml
默认读取master分支下的  config-dev.yml
http://127.0.0.1:7003/config-dev.yml
第三种/{application}/{profile}/{label} http://127.0.0.1:7003/config/dev/master 表示读取master分支的config-dev.yml
http://127.0.0.1:7003/config/prod/master表示读取master分支的config-prod.yml

4.springCloud整合config- client配置客户端

 1.版本说明

 SpringBoot版本为2.6.4 SpringCloud版本2021.0.1

 2.初始化项目pom.xml依赖配置

<?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>zhangy-spring-cloud</artifactId>
        <groupId>com.zhangy.springCloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <description>配置中心客户端1</description>
    <artifactId>spring-cloud-config-client1</artifactId>

    <dependencies>
        <!--消息总线bus rabbitmq依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <!--读取bootstrap.yml配置-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <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.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>com.zhangy.springCloud</groupId>
            <artifactId>spring-cloud-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

3.bootstrap.yml配置

server:
  port: 9010


spring:
  application:
    name: cloud-config-client1
  cloud:
    config:
      label: master #指定git的具体分支
      name: config
      profile: prod #读取后缀名为-dev.yml或-prod.yml的 master分支的config-dev.yml的配置文件  http://127.0.0.1:7003/master/config-dev.yml
      uri: http://127.0.0.1:7003  #配置中心服务端地址
#读取规则  ${spring.config.uri}/{spring.config.label}/{spring.config.name}-${spring.config.profile}.yml

  rabbitmq:
    host: mq所在服务器的地址
    port: 5672
    username: admin
    password: admin


eureka:
  instance:
    instance-id: cloud-config-client-9010
    #true表示显示ip
    prefer-ip-address: true
  client:
    #true表示向注册中心注册自己
    register-with-eureka: true
    #true 表示从eureka抓取信息
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka,http://eureka7001.com:7001/eureka

#暴露监控断点
management:
  endpoints:
    web:
      exposure:
        include: "*"

4.启动类

/**
 * @author: zhangyou
 * @date: 2022/5/19 2:30 上午
 * @description:
 */
@SpringBootApplication
@EnableEurekaClient
public class SpringCloudConfigClientApplication1 {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConfigClientApplication1.class, args);
    }
}

5.获取gitee配置信息的类

package com.zhangy.springCloud.config.client.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * @author: zhangyou
 * @date: 2022/5/19 2:47 上午
 * @description:
 */
@RestController
@RefreshScope
public class TestController {
    //一下参数对应gitee配置文件的内容
    @Value("${config.url}")
    private String url;

    @Value("${config.driverName}")
    private String driverName;

    @Value("${config.userName}")
    private String userName;

    @Value("${config.password}")
    private String password;

    @Value("${config.version}")
    private String version;

    @Value("${config.env}")
    private String env;
    @RequestMapping("/client/getConfigInfo")
    public Map<String,Object> getConfigInfo(){
        Map<String,Object> map = new HashMap<>();
        map.put("url",url);
        map.put("driverName",driverName);
        map.put("userName",userName);
        map.put("password",password);
        map.put("version",version);
        map.put("env",env);
        return map;
    }
}

按照上述步骤在初始化一个配置客户端项目,注意修改bootstrap.yml的端口号服务名和实例id

比如两个客户端的端口号分别为9010和9011

9010的yml配置如上所示,9011的yml配置如下

server:
  port: 9011


spring:
  application:
    name: cloud-config-client2
  cloud:
    config:
      label: master #指定git的具体分支
      name: config
      profile: prod #读取后缀名为-dev.yml或-prod.yml的 master分支的config-dev.yml的配置文件  http://127.0.0.1:7003/master/config-dev.yml
      uri: http://127.0.0.1:7003  #配置中心服务端地址
#读取规则  ${spring.config.uri}/{spring.config.label}/{spring.config.name}-${spring.config.profile}.yml

  rabbitmq:
    host: mq所在服务器的地址
    port: 5672
    username: admin
    password: admin


eureka:
  instance:
    instance-id: cloud-config-client-9011
    #true表示显示ip
    prefer-ip-address: true
  client:
    #true表示向注册中心注册自己
    register-with-eureka: true
    #true 表示从eureka抓取信息
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka,http://eureka7001.com:7001/eureka

#暴露监控断点
management:
  endpoints:
    web:
      exposure:
        include: "*"

6.启动两个客户端项目并访问

访问地址:http://127.0.0.1:9010/client/getConfigInfo   http://127.0.0.1:9011/client/getConfigInfo

结果如下:

7.更改gitee配置文件内容使用消息总线bus进行广播

 第一个post请求代表所有的配置客户端9010和9011都能收到gitee最新的消息

 http://127.0.0.1:7003/actuator/busrefresh/

 第二个post请求代表只有9011的客户端能获取最新的gitee配置信息,9010不能获取最新的

 格式:http://127.0.0.1:7003/actuator/busrefresh/客户端微服务名:端口 http://127.0.0.1:7003/actuator/busrefresh/cloud-config-client2:9011

8.查看RabbitMq的信息 

9.查看Eureka注册中心的服务 

5.总结消息总线流程图

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值