尚硅谷2020最新版SpringCloud(H版&alibaba)框架开发教程学习二 spring cloud服务注册中心Eureka:集群版Eureka配置/支付微服务集群配置

集群版Eureka配置/支付payment微服务集群配置

一. Eureka配置IDEA 中 同一个微服务 按照多个端口启动

1. 修改Eureka的application.yml文件

同一个项目打算启动两个server服务,占用不同的端口,以此模拟eureka服务集群

spring:
  application:
    name: eureka
  profiles:
    active: server1

2. 新建一个application-server1.yml

注意:defaultZone: http://server2:7002/eureka/
server2互相注册

server:
  port: 7001
eureka:
  instance:
    hostname: server1
  client:
    # 表示是否注册自身到eureka服务器
    register-with-eureka: false
    # 是否从eureka上获取注册信息
    fetch-registry: false
    service-url:
      defaultZone: http://server2:7002/eureka/

3.建一个application-server2.yml

注意:defaultZone: http://server1:7001/eureka/
与server1互相注册

server:
  port: 7002
eureka:
  instance:
    hostname: server2
  client:
    # 表示是否注册自身到eureka服务器
    register-with-eureka: false
    # 是否从eureka上获取注册信息
    fetch-registry: false
    service-url:
      defaultZone: http://server1:7001/eureka/

4. 修改hosts文件

指定了不同的端口,并且service-url这里是重点,我将server1的service-url设置为server2,将server2的设置为server1.以此完成两个server服务间的相互注册,instance.hostname是唯一标识。
由于我们使用了http://server1这种写法,需要配一下host。Windows的host在/etc/host,mac的在/private/etc

127.0.0.1  server1
127.0.0.1  server2

5. idea配置Eureka服务

在这里插入图片描述
在这里插入图片描述

配置各服务的启动参数,参数对应各自的yml文件名
server1 的参数:–spring.profiles.active=server1

在这里插入图片描述

server2 的参数:–spring.profiles.active=server2
在这里插入图片描述

6. 启动两个Eureka服务,分别访问各自的端口,互相注册成功

http://server2:7002/
http://server1:7001/
在这里插入图片描述
在这里插入图片描述

7. 将各服务注册到集群

修改各自服务的application.yml文件,将Eureka集群服务器地址配进去

 service-url:
      defaultZone: http://server1:7001/eureka, http://server2:7002/eureka #集群

二. 服务提供者cloud-payment-service的集群配置

idea的配置方法与Eureka集群的配置方法一致

1. application.yml配置

在这里插入图片描述

spring:
  application:
    name: cloud-payment-service
  profiles:
    active: server1
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://192.168.1.9:3306/springboot2020?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.iyoker.springcloud.entities #所有Entity别名类所在包
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://server1:7001/eureka, http://server2:7002/eureka #集群

2. application-server1.yml配置

server:
  port: 8001

3. application-server2.yml配置

server:
  port: 8002

4. idea的配置方法与Eureka集群的配置方法一致

5. 分别启动配置好的服务

6. 查看Eureka的注册情况,两个服务注册成功

在这里插入图片描述

三. 服务消费者cloud-order-service使用集群的代码修改

服务调用的url地址使用服务提供者的服务名即微服务的名称-cloud-payment-service

1.Controller层修改

// public static final String PAYMENT_URL="http://localhost:8001";
    //集群时不要写死,要写服务通过者的服务名
    public static final String PAYMENT_URL="http://cloud-payment-service";

2. congfig配置文件ApplicationContextConfig.java的修改

添加@LoadBalanced注解启动调用服务的负载均衡

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

3. 服务重启测试,负载均衡生效

在这里插入图片描述
在这里插入图片描述

四. 功能的完善

1. 主机名称,服务名称的修改

yaml配置文件添加 instance-id

server:
  port: 8001
eureka:
  instance:
    instance-id: payment8001
server:
  port: 8002
eureka:
  instance:
    instance-id: payment8002

2. 访问路径ip地址的显示

yaml配置文件添加prefer-ip-address: true

server:
  port: 8001
eureka:
  instance:
    instance-id: payment8001
    prefer-ip-address: true #访问路径ip地址的显示

3. 服务发现Discovery

在这里插入图片描述
在这里插入图片描述

1. 添加注解

@Resource
private DiscoveryClient discoveryClient;
注意导入的包是org.springframework.cloud.client.discovery.DiscoveryClient;

 @Resource
 private DiscoveryClient discoveryClient;
@GetMapping(value = "/payment/discovery")
    public Object discorvery(){
        List<String> serviceList= discoveryClient.getServices();
        for (String service : serviceList) {
            log.info("[***提供的服务***]:{}",service);
        }
        //根据服务名获取启动的服务具体实例
        List<ServiceInstance> instanceList = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        for (ServiceInstance instance : instanceList) {
            log.info("***CLOUD-PAYMENT-SERVICE服务id:{},主机名:{},端口:{},Url地址:{}",instance.getInstanceId(),instance.getHost(),instance.getPort(),instance.getUri());
        }
        return discoveryClient;
    }

2. Discovery测试结果

在这里插入图片描述

4.Eurek自我保护

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 关闭Eureka自我保护

1.服务端配置

在这里插入图片描述

2. 客户端的相关配置

在这里插入图片描述

发布了11 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/foundtime/article/details/105545377