Eruake集群搭建(实现代码)

搭建注册中心集群 以防出现单点故障 也就是唯一那个注册中心出现故障 导致整个架构故障

此次实现时伪集群,单台计算机搭建,所以需要修改host文件进行模拟

C:\Windows\System32\drivers\etc\hosts 修改映射文件

127.0.0.1  eureka1
127.0.0.1  eureka2

eureka1配置 (这里使用一个项目搭建,使用idea复制启动类,读取不同的配置文件即可)

application-server1.yml

spring:
  application:
    name: eureka
server:
  port: 8761
eureka:
  client:
    service-url:
      #注册中心地址
      defaultZone: http://eureka2:8762/eureka
  instance:
    hostname: eureka1

eureka2配置 

application-server2.yml

spring:
  application:
    name: eureka
server:
  port: 8762
eureka:
  client:
    service-url:
      #注册中心地址 互相注册,将1注册到2,2注册到1
      defaultZone: http://eureka1:8761/eureka
  instance:
    hostname: eureka2

注意:

  1.配置文件中的 hostname 属性与注册的主机地址相同。

  2.集群中不能有以下配置,否则集群中的eruake服务无法互相发现,互相拉去服务,也无法监听到,并且提示无法使用,但是这种情况下服务还能够正常运行,所以很多人忽略此问题。

#false表示不向服务器注册自己
register-with-eureka: false
#false表示自己就是注册中心 去维护服务实例 不需要去检索服务
fetch-register: false

此时我们分配启动查看。

 我们发现集群中的服务已经互相注册,然后我们查看这里

 unavailable代表不能使用的,available代表正常的。如果配置了不拉去不发现自身服务则会出现问题。

此时简单的集群搭建完成,下面我们来注册两个服务提供和一个调用调用。

用户服务

8001端口用户服务(为了隐藏数据库连接使用了config配置中心配置到git中,重点是eruake配置)

spring:
  application:
    name: user-server
  #被提取到gitee中了
  cloud:
    config:
      discovery:
        #开启使用config配置中心
        enabled: true
        #配置中心服务应用名称
        service-id: config-server
      #git分支名称
      label: master
      #git文件名称
      name: user
      #git文件环境
      profile: test
#mybatis别名
#被提取到gitee中了

#配置eureka客户端
eureka:
  client:
    service-url:
      defaultZone:  http://eureka1:8761/eureka,http://eureka2:8762/eureka
  instance:
    prefer-ip-address: true
server:
  port: 8001
management:
  endpoints:
    web:
      exposure:
        #此处刷新地址必须叫refresh
        include: refresh

8002端口用户服务

使用idea的功能复制一个相同的启动类然后指定端口即可,模仿创建了集群。

 重要的是  defaultZone 属性 需要同时向两个服务中注册。或者向其中一个服务中注册 ,因为eruake是相互监听拉取的。

现在启动两个服务提供者查看

服务成功注册到eruake中。

下面注入一个调用者

调用者/消费者

server:
  port: 8081
spring:
  application:
    name: consumer-service

#配置eureka客户端
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:8761/eureka,http://eureka2:8762/eureka
  instance:
    prefer-ip-address: true

启动

 注册成功,这里我们为了演示方便不使用Fegin负载均衡调用消费者,直接使用 RestTemplate 搭配  ribbon

@Bean
@LoadBalanced //使用ribbon
public RestTemplate restTemplate() {
   RestTemplate restTemplate = new RestTemplate();
   return restTemplate;
}
@RestController
public class UserController {

    @Autowired
    RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

    @RequestMapping("users/{id}")
    public R users(@PathVariable Integer id) {
        //根据服务应用名称从注册列表获取服务实例
        String strUrl = "http://user-server/users/" + id;
        R forObject = restTemplate.getForObject(strUrl, R.class);
        return forObject;
    }
}

直接访问8081消费者接口

 

 

 我们发现其中的port字段会随之变化,者是ribbon按照一定的策略进行了负载均衡

 

posted @ 2020-10-24 14:54  一半人生  阅读(1077)  评论(0编辑  收藏  举报