Spring Cloud微服务组件的使用

目录

Eureka Server

添加依赖

服务注册

配置

访问

Service Provider

添加依赖

服务注册

配置

spring-cloud-eureka-provider-1

spring-cloud-eureka-provider-2

spring-cloud-eureka-provider-3

访问

Consul 服务治理

关闭防火墙

下载,然后unzip 解压

查看版本

node1启动 Consul

node2启动 Consul,并加入到node1节点

node3启动 Consul,并加入到node1节点

查看节点

添加依赖

服务注册

配置

启动

Ribbon Consumer

添加依赖

开启服务负载均衡

消费提供者方法

添加配置

测试服务

负载均衡

Feign Consumer

添加依赖

开启Feign

定义接口

消费方法

配置

测试

  负载均衡响应

断路器监控(Hystrix Dashboard)

Ribbon Hystrix

添加依赖

服务注册

消费提供者方法

配置

测试断路器

Feign Hystrix

服务注册

配置

测试断路器

Hystrix Dashboard

添加依赖

开启 HD

声明断路点

配置

测试服务

Spring Cloud Zuul

添加依赖

开启服务注册

添加配置

测试服务

TokenFilter 过滤器

PasswordFilter 过滤器

开启过滤器

token 测试

Spring Cloud Config

一、Config Server

添加依赖

开启服务注册

添加配置

测试服务

二、Config Client

添加依赖

开启服务注册

添加配置

测试服务

三、集成 Eureka

开启服务注册

配置

测试服务

四、Config Client Eureka

添加依赖

开启服务注册

添加配置

测试服务

Spring Cloud Bus集成RabbitMQ

一、Config Server

添加依赖

添加配置

二、Config Client

添加依赖

添加配置

测试服务

启动RabbitMQ

启动项目


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.ibm.moses</groupId>
    <artifactId>spring-cloud</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>spring-cloud</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
        <swagger2.version>2.9.2</swagger2.version>
        <druid.version>1.1.12</druid.version>
    </properties>
    <modules>
        <module>spring-cloud-zuul-filter</module>
        <module>spring-cloud-eureka-service</module>
        <module>spring-cloud-provider-1</module>
        <module>spring-cloud-provider-2</module>
        <module>spring-cloud-provider-3</module>
        <module>spring-cloud-consul</module>
        <module>spring-cloud-ribbon-consumer</module>
        <module>spring-cloud-feign-consumer</module>
        <module>spring-cloud-ribbon-consumer-hystrix</module>
        <module>spring-cloud-feign-consumer-hystrix</module>
        <module>spring-cloud-ribbon-consumer-hystrix-dashboard</module>
        <module>spring-cloud-config-server</module>
        <module>spring-cloud-config-client</module>
    </modules>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--引入JDBC的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--引入mysql连接-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--引入web依赖,可以使用@RequestMapping,@RestController等注解-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入jpa依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${swagger2.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${swagger2.version}</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

Eureka Server

添加依赖

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

服务注册

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
@EnableEurekaServer
public class EurekaServerApplication {
   
public static void main(String[] args) {
       
SpringApplication.run(EurekaServerApplication.class, args);
   
}
}

配置

eureka:
 
instance:
   
hostname: localhost
 
client:
   
fetch-registry: false
    register-with-eureka
: false
    serviceUrl
:
     
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

spring:
 
application:
   
name: eureka-service
server:
 
port: 8761

访问

http://localhost:8761/

Service Provider

添加依赖

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

服务注册

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
@EnableEurekaClient
@RestController

public class EurekaProviderApplication {
   
@Value("${server.port}")
   
String port;

   
@RequestMapping("/")
   
public String home() {
       
return "Hello world ,port:" + port;
   
}

   
public static void main(String[] args) {
       
SpringApplication.run(EurekaProviderApplication.class, args);
   
}
}

配置

spring-cloud-eureka-provider-1

eureka:
 
client:
   
serviceUrl:
     
defaultZone: http://localhost:8761/eureka/

spring:
 
application:
   
name: eureka-provider
server:
 
port: 8081

spring-cloud-eureka-provider-2

eureka:
 
client:
   
serviceUrl:
     
defaultZone: http://localhost:8761/eureka/

spring:
 
application:
   
name: eureka-provider
server:
 
port: 8082

spring-cloud-eureka-provider-3

eureka:
 
client:
   
serviceUrl:
     
defaultZone: http://localhost:8761/eureka/

spring:
 
application:
   
name: eureka-provider
server:
 
port: 8083

 

访问

http://localhost:8761/

Consul 服务治理

关闭防火墙

systemctl stop firewalld.service

下载,然后unzip 解压

cd /opt/
unzip consul_1.7.3_linux_amd64.zip
cp consul /usr/local/bin/

查看版本

consul version

主机名称

IP

作用

是否允许远程访问

node1

192.168.1.101

consul server

node2

192.168.1.103

consul client

node3

192.168.1.104

consul client

node1启动 Consul

cd /opt/
mkdir data
consul agent -data-dir /opt/data -node=192.168.1.101 -bind=0.0.0.0 -datacenter=dc1 -ui -client=192.168.1.101 -server -bootstrap-expect 1 > /dev/null 2>&1 &

node2启动 Consul,并加入到node1节点

cd /opt/
mkdir data
consul agent -data-dir /opt/data -node=192.168.1.103 -bind=0.0.0.0 -datacenter=dc1 -ui  -client=192.168.1.103 -join=192.168.1.101 > /dev/null 2>&1 &

node3启动 Consul,并加入到node1节点

cd /opt/
mkdir data
consul agent -data-dir /opt/data -node=192.168.1.104 -bind=0.0.0.0 -datacenter=dc1 -ui  -client=192.168.1.104 -join=192.168.1.101 > /dev/null 2>&1 &

查看节点

http://192.168.1.101:8500/ui/dc1/nodes

添加依赖

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

服务注册

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
@RestController
public class ConsulApplication {
    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }

    public static void main(String[] args) {
        SpringApplication.run(ConsulApplication.class, args);
    }
}

配置

spring:
 
application:
   
name: consul-client
 
cloud:
   
consul:
     
host: 192.168.1.101
     
port: 8500
     
discovery:
       
healthCheckPath: /
       
healthCheckInterval: 5s

启动

nohup java -jar spring-cloud-consul-client-0.0.1-SNAPSHOT.jar  > /dev/null 2>&1 &

Ribbon Consumer

添加依赖

<!-- 客户端负载均衡 -->
<dependency>
    <
groupId>org.springframework.cloud</groupId>
    <
artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</
dependency>
<
dependency>
    <
groupId>org.springframework.cloud</groupId>
    <
artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</
dependency>

开启服务负载均衡

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
public class RibbonConsumerApplication {
    @LoadBalanced
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(RibbonConsumerApplication.class, args);
    }
}

消费提供者方法

@RestController
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping(value = "/hello")
    public String hello() {
        return restTemplate.getForEntity("http://eureka-provider/", String.class).getBody();
    }
}

添加配置

eureka:
 
client:
   
serviceUrl:
     
defaultZone: http://localhost:8761/eureka/

spring:
 
application:
   
name: ribbon-consumer

server:
 
port: 9000

测试服务

http://localhost:8761/

负载均衡

http://localhost:9000/hello

Feign Consumer

添加依赖

        <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-openfeign</artifactId>
        </dependency>

开启Feign

 

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableFeignClients
@EnableDiscoveryClient
public class FeignConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(FeignConsumerApplication.class, args);
    }
}

定义接口

@FeignClient("eureka-provider")
public interface HomeClient {
    @GetMapping("/")
    String consumer();
}

消费方法

@RestController
public class ConsumerController {
    @Autowired
    private HomeClient homeClient;

    @GetMapping(value = "/hello")
    public String hello() {
        return homeClient.consumer();
    }
}

配置

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: feign-consumer

server:
  port: 9000

测试

http://localhost:8761/

  负载均衡响应

   

断路器监控(Hystrix Dashboard)

Ribbon Hystrix

添加依赖

        <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-netflix-ribbon</artifactId>
        </dependency>
        <!-- hystrix 断路器 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

服务注册

@EnableHystrix
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
public class RibbonConsumerApplication {
    @LoadBalanced
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(RibbonConsumerApplication.class, args);
    }
}

消费提供者方法

@RestController
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "defaultStores")
    @GetMapping(value = "/hello")
    public String hello() {
        return restTemplate.getForEntity("http://eureka-provider/", String.class).getBody();
    }

    public String defaultStores() {
        return "Ribbon + hystrix ,提供者服务挂了";
    }
}

配置

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: ribbon-consumer-hystrix

server:
  port: 9000

测试断路器

http://localhost:8761/

停止 spring-cloud-eureka-provider-1 再次访问

http://localhost:9000/hello 

Feign Hystrix

服务注册

@FeignClient(value = "eureka-provider", fallbackFactory = HystrixClientFallbackFactory.class)
public interface HomeClient {
    @GetMapping("/")
    String consumer();
}

HystrixClientFallbackFactory.java

@Component
public class HystrixClientFallbackFactory implements FallbackFactory<HomeClient> {
    @Override
    public HomeClient create(Throwable throwable) {
        return () -> "Feign + hystrix ,提供者服务挂了";
    }
}

配置

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: feign-consumer-hystrix

server:
  port: 9000

feign:
  hystrix:
    enabled: true

测试断路器

停止 spring-cloud-eureka-provider-1 提供者

访问http://localhost:9000/hello

Hystrix Dashboard

添加依赖

        <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-netflix-ribbon</artifactId>
        </dependency>
        <!-- hystrix 断路器 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <!--        Starter for using Spring Boot's Actuator which provides production ready features to help you monitor and manage your application-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- hystrix 断路器 仪表盘 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>

开启 HD

@EnableHystrix
@EnableHystrixDashboard
@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class RibbonConsumerApplication {
    @LoadBalanced
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(RibbonConsumerApplication.class, args);
    }
}

声明断路点

@RestController
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "defaultStores")
    @GetMapping(value = "/hello")
    public String hello() {
        return restTemplate.getForEntity("http://eureka-provider/", String.class).getBody();
    }

    public String defaultStores() {
        return "Ribbon + hystrix Dashboard ,提供者服务挂了";
    }
}

配置

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: ribbon-consumer-hystrix-Dashboard
server:
  port: 9000

测试服务

http://localhost:8761/

Hystrix Dashboard 监控

http://localhost:9000/hystrix

http://127.0.0.1:9000/hystrix.stream,2000,hello

Spring Cloud Zuul

添加依赖

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

开启服务注册

@EnableZuulProxy
@SpringBootApplication
public class ZuulFilterApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulFilterApplication.class, args);
    }
}

添加配置

spring:
  application:
    name: zuul-service-filter
server:
  port: 9000

zuul:
  routes:
    api:
      path: /api1/**
      serviceId: eureka-provider

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

测试服务

负载均衡

http://127.0.0.1:9000/api1

TokenFilter 过滤器

public class TokenFilter extends ZuulFilter {
    private final Logger LOGGER = LoggerFactory.getLogger(TokenFilter.class);

    /**
     * 请求被路由之前调用
     *
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * filter执行顺序,通过数字指定 ,优先级为0,数字越大,优先级越低
     *
     * @return
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     * 是否执行该过滤器,此处为true,说明需要过滤
     *
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        LOGGER.info("--->>> TokenFilter {},{}", request.getMethod(), request.getRequestURL().toString());
        // 获取请求的参数
        String token = request.getParameter("token");
        if (StringUtils.isNotBlank(token)) {
            //对请求进行路由
            ctx.setSendZuulResponse(true);
            ctx.setResponseStatusCode(200);
            ctx.set("isSuccess", true);
            return null;
        } else {
            //不对其进行路由
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(400);
            ctx.setResponseBody("token is empty");
            ctx.set("isSuccess", false);
            return null;
        }
    }
}

PasswordFilter 过滤器

public class PasswordFilter extends ZuulFilter {
    private final Logger LOGGER = LoggerFactory.getLogger(TokenFilter.class);

    /**
     * 请求处理完成后执行的filter
     *
     * @return
     */
    @Override
    public String filterType() {
        return "post";
    }

    /**
     * filter执行顺序,通过数字指定 ,优先级为0,数字越大,优先级越低
     *
     * @return
     */
    @Override
    public int filterOrder() {
        return 1;
    }

    /**
     * 判断上一个过滤器结果为true,否则就不走下面过滤器,直接跳过后面的所有过滤器并返回 上一个过滤器不通过的结果。
     *
     * @return
     */
    @Override
    public boolean shouldFilter() {
        RequestContext ctx = RequestContext.getCurrentContext();
        return (boolean) ctx.get("isSuccess");
    }

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        LOGGER.info("--->>> PasswordFilter {},{}", request.getMethod(), request.getRequestURL().toString());
        String username = request.getParameter("password");
        if (null != username && username.equals("123456")) {
            ctx.setSendZuulResponse(true);
            ctx.setResponseStatusCode(200);
            ctx.set("isSuccess", true);
            return null;
        } else {
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(400);
            ctx.setResponseBody("The password cannot be empty");
            ctx.set("isSuccess", false);
            return null;
        }
    }
}

开启过滤器

@EnableZuulProxy
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class ZuulFilterApplication {
    @Bean
    public TokenFilter tokenFilter() {
        return new TokenFilter();
    }

    @Bean
    public PasswordFilter PasswordFilter() {
        return new PasswordFilter();
    }

    public static void main(String[] args) {
        SpringApplication.run(ZuulFilterApplication.class, args);
    }
}

token 测试

http://localhost:9000/api1?token=token-uuid

http://localhost:9000/api1?token=token-uuid&&password=123456

Spring Cloud Config

一、Config Server

添加依赖

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

开启服务注册

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableConfigServer
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

添加配置

spring:
  application:
    name: config-server
  cloud:
    config:
      label: master
      server:
        git:
          uri: https://github.com/glory2018/spring-cloud-config.git #配置文件所在仓库
          search-paths: spring-cloud-config  #配置文件所在根目录
          #私有仓库需要填写用户名密码,公开仓库不需要
          #          username: github 登录账号
          #          password: github 登录密码
          #          default-label: master #配置文件分支
server:
  port: 8888

application-dev.properties

content=hello dev

application-test.properties

content=hello test

application-prod.properties

content=hello prod

测试服务

http://localhost:8888/springCloudConfig/dev/master

二、Config Client

添加依赖

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

开启服务注册

@RestController
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class ConfigClientApplication {
    @Value("${content}")
    String content;

    @RequestMapping("/")
    public String home() {
        return "content:" + content;
    }

    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }
}

添加配置

spring:
  application:
    name: config-client
  cloud:
    config:
      label: master
      profile: dev
      uri: http://localhost:8888 #通过域名访问配置中心服务端
#      fail-fast: true
#      discovery:
#        enabled: true
server:
  port: 8088

测试服务

http://localhost:8088/

三、集成 Eureka

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

开启服务注册

@EnableEurekaClient
@EnableConfigServer
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

配置

spring:
  application:
    name: config-server
  cloud:
    config:
      label: master
      server:
        git:
          uri: https://github.com/glory2018/spring-cloud-config.git #配置文件所在仓库
          search-paths: spring-cloud-config  #配置文件所在根目录
          #私有仓库需要填写用户名密码,公开仓库不需要
          #          username: github 登录账号
          #          password: github 登录密码
          #          default-label: master #配置文件分支
server:
  port: 8888

eureka:
#  instance:
#    hostname: eureka1.client.com
#    lease-renewal-interval-in-seconds: 5
#    lease-expiration-duration-in-seconds: 10
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

测试服务

http://localhost:8888/springCloudConfig/dev/master

四、Config Client Eureka

spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3

添加依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>
        <!-- actuator 监控 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

开启服务注册


@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableEurekaClient
@RestController
public class EurekaProviderApplication {
    @Value("${content}")
    String content;
    @Value("${server.port}")
    String port;

    @RequestMapping("/")
    public String home() {
        return "Hello world ,port:" + port + ",content=" + content;
    }

    public static void main(String[] args) {
        SpringApplication.run(EurekaProviderApplication.class, args);
    }
}

添加配置

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: eureka-provider
  cloud:
    config:
      label: master
      profile: dev
#      uri: http://localhost:8888
      discovery:
        enabled: true               #从配置中心读取文件
        service-id: config-server   #通过服务名称去Eureka注册中心找服务

server:
  port: 8081

测试服务

spring-cloud-eureka-service
spring-cloud-config-server
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
spring-cloud-feign-consumer

http://localhost:8761/

http://localhost:9000/hello

Spring Cloud Bus集成RabbitMQ

一、Config Server

spring-cloud-config-server

添加依赖

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

添加配置

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: config-server
  cloud:
    config:
      label: master
      server:
        git:
          uri: https://github.com/glory2018/spring-cloud-config.git #配置文件所在仓库
          search-paths: spring-cloud-config  #配置文件所在根目录
          #私有仓库需要填写用户名密码,公开仓库不需要
          #          username: github 登录账号
          #          password: github 登录密码
          #          default-label: master #配置文件分支
  rabbitmq:
    host: 192.168.1.102
    port: 5672
    username: moses
    password: 123456
server:
  port: 8888

二、Config Client

  • spring-cloud-eureka-provider-1
  • spring-cloud-eureka-provider-2
  • spring-cloud-eureka-provider-3

添加依赖

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

添加配置

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: eureka-provider
  cloud:
    config:
      label: master
      profile: dev
#      uri: http://localhost:8888
      discovery:
        enabled: true               #从配置中心读取文件
        service-id: config-server   #通过服务名称去Eureka注册中心找服务
  rabbitmq:
    host: 192.168.1.102
    port: 5672
    username: moses
    password: 123456

测试服务

启动RabbitMQ

启动项目

  • spring-cloud-eureka-service
  • spring-cloud-config-server
  • spring-cloud-eureka-provider-1
  • spring-cloud-eureka-provider-2
  • spring-cloud-eureka-provider-3
  • spring-cloud-feign-consumer

http://localhost:8761/

 

http://localhost:15672/#/queues

 

http://localhost:8888/springCloudConfig/dev/master

修改配置

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值