一、开发环境window10微服务注册中心搭建—Eureka

简述:Eureka 是天生集群的,搭建配置相当简单:不论你有多少的机器部署,只要相互之间指定对方的注册中心地址就可以了,而多个 Eureka Server 之间是通过复制的方式完成注册服务的同步,遵循AP原则。

一、开发环境window10微服务注册中心搭建—Eureka_第1张图片

一、开发环境window10微服务注册中心搭建—Eureka_第2张图片

优点:

  1. 从设计角度来看,Eureka可以说是无懈可击,注册中心、提供者、调用者边界清晰通过去中心化的集群支持保证了注册中心的整体可用性
  2. 可以运行多个实例来构建集群,解决单点问题。但不同于 ZooKeeper 的选举 leader 的过程,Eureka Server 采用的是Peer to Peer 对等通信。这是一种去中心化的架构,无 master/slave 之分,每一个 Peer 都是对等的。在这种架构风格中,节点通过彼此互相注册来提高可用性,每个节点需要添加一个或多个有效的 serviceUrl 指向其他节点。每个节点都可被视为其他节点的副本。因此,Eureka可以很好的应对因网络故障导致部分节点失去联系的情况。

缺点:

1.Eureka属于应用内的注册方式,对应用的侵入性太强,且只支持Java应用。

eureka集群注册中心的搭建以及测试:

搭建三个注册中心(也可以多个或者两个,因为eureka集群是p2p的,并不是选举模式,故可随意增加数量且搭建简单)

简而言之,首先搭建父项目springcloud用于统一管理包,然后创建springcloud_eureka的顶级项目,在该项目下创建三个注册中心eureka1、eureka2、eureka3以及测试用的生产者项目provider以及消费者项目consumer,测试注册中心是否正常。

整体目录结构如下:

一、开发环境window10微服务注册中心搭建—Eureka_第3张图片

  1. 首先创建springcloud项目并在其创建子项目springcloud-eureka项目(该项目下pom文件保持创建时默认配置即可),并在springcloud项目的pom文件中添加以下配置:



    org.springframework.boot
    spring-boot-starter-parent
    2.6.11
    



    
        
            org.springframework.cloud
            spring-cloud-dependencies
            2021.0.2
            pom
            import
        
    

2.然后在springcloud-eureka项目下创建三个注册中心项目,并在pom文件中添加以下配置,同时对于三个注册中心的application配置需要稍微修改其中几个配置项:

Pom文件添加以下依赖:


    
        org.springframework.boot
        spring-boot-starter-web
    


    
    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-server
    


        org.springframework.boot
        spring-boot-starter-actuator
    


Application.yml配置文件添加以下:

server:
  port: 8761

eureka:
  instance:
    # 配置主机名,请在【Host】文件中进行主机名与本机ip的映射配置
    hostname: eureka-server1
    # 显示 ip 地址,代替显示主机名
    prefer-ip-address: true
    # 所注册服务实例名称的显示形式
    instance-id: ${eureka.instance.hostname}:${server.port}
    # 每隔 3 秒发一次心跳包
    lease-renewal-interval-in-seconds: 3
    # 如果 15 秒没有发送心跳包,就让 eureka 把自己从服务列表中移除
    lease-expiration-duration-in-seconds: 15
  client:
    service-url:
      # 想要搭建 eureka 集群,需要将自己注册到其它的 eureka 中
      # 因此这里需要配置其它 eureka 地址,多个地址以英文逗号分隔
      defaultZone: http://eureka-server2:8762/eureka,http://eureka-server3:8763/eureka
    # 是否将自己的路径注册到 eureka 上
    register-with-eureka: true
    # 是否需要从 eureka 中抓取路径
    fetch-registry: true
  server:
    # 关闭 eureka 自我保护,当注册的服务未及时发送心跳时,自动移除服务
    enable-self-preservation: false
    # eureka 检查服务是否存在的时间间隔(毫秒)
    eviction-interval-timer-in-ms: 5000
  dashboard:
    enabled: true
    # eureka 监控页面路径 默认访问: http://地址:端口
    path: "/"

# 集群需要使用相同的 application 名称
spring:
  application:
    name: eureka-server-cluster

#actuator——springboot四大核心程序监控器配置
# actuator 监控配置
management:
  #actuator端口 如果不配置做默认使用上面8080端口
  server:
    port: 7761
  info:
    env:
      enabled: true
  endpoints:
    web:
      exposure:
        #默认值访问health,info端点  用*可以包含全部端点
        include: "*"
      #修改访问路径 2.0之前默认是/; 2.0默认是/actuator可以通过这个属性值修改
      base-path: /actuator
  endpoint:
    shutdown:
      enabled: true #打开shutdown端点
    health:
      show-details: always #获得健康检查中所有指标的详细信息

info:
  app.name: eureka注册中心1机
  app.model: eureka
  app.desc: eureka集群中的第一台机
  company.name: dogquan
  build.version: eureka 3.1.2

启动类记得添加;@EnableEurekaServer

一、开发环境window10微服务注册中心搭建—Eureka_第4张图片

关于eureka-server1 需要在host文件中进行映射,同理其它两个中心。类比eureka1中心的创建,相继可创建集群中其它两个中心,创建完后先后启动三个注册中心,访问地址http://eureka-server1:8761即可访问到eureka监控中心的相关信息。包括注册的消费者,提供者以及集群的其它两个注册中心。

3.最后在springcloud-eureka项目下相继又创建生产者provider以及consumer消费者项目进行测试注册中心的可用性(消费者又可以是生产者,两者基于服务的供给相互切换身份):

生产者:

一、开发环境window10微服务注册中心搭建—Eureka_第5张图片

Pom文件中添加以下依赖:


    
    
        org.springframework.boot
        spring-boot-starter-web
    

    
    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-client
    

Application.yml配置文件添加以下配置:

server:
  port: 8200

eureka:
  instance:
    # 配置主机名,请在【Host】文件中进行主机名与本机ip的映射配置
    hostname: provider_service
    # 显示 ip 地址,代替显示主机名
    prefer-ip-address: true
    # 所注册服务实例名称的显示形式
    instance-id: ${eureka.instance.hostname}:${server.port}
    # 每隔 3 秒发一次心跳包
    lease-renewal-interval-in-seconds: 3
    # 如果 15 秒没有发送心跳包,就让 eureka 把自己从服务列表中移除
    lease-expiration-duration-in-seconds: 15
  client:
    service-url:
      # 将当前 springboot 服务注册到所有的 eureka 中,多个地址以英文逗号分隔
      defaultZone: http://eureka-server1:8761/eureka,http://eureka-server2:8762/eureka,http://eureka-server3:8763/eureka
    # 是否将自己的路径注册到 eureka 上
    register-with-eureka: true
    # 是否需要从 eureka 中抓取路径
    fetch-registry: true

# 集群需要使用相同的 application 名称
spring:
  application:
    name: provider-App

创建controller层并添加以下代码:

@RequestMapping("/provider")
@RestController
public class ProviderController {

    @RequestMapping("/getdata/{id}")
    public Map GetData(@PathVariable("id") int id) {

        Map result = new HashMap();
        result.put("status",0);
        result.put("msg","success");
        result.put("get_id_value",id);
        result.put("version", UUID.randomUUID().toString());

        return result;
    }
}

在启动类Provider上记得添加:@EnableEurekaClient

@EnableEurekaClient

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

消费者:

一、开发环境window10微服务注册中心搭建—Eureka_第6张图片

Pom文件添加以下依赖:


    
    
        org.springframework.boot
        spring-boot-starter-web
    

    
    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-client
    

Application.yml配置中添加以下:

server:
  port: 8100

eureka:
  instance:
    # 配置主机名,请在【Host】文件中进行主机名与本机ip的映射配置
    hostname: consumer_service
    # 显示 ip 地址,代替显示主机名
    prefer-ip-address: true
    # 所注册服务实例名称的显示形式
    instance-id: ${eureka.instance.hostname}:${server.port}
    # 每隔 3 秒发一次心跳包
    lease-renewal-interval-in-seconds: 3
    # 如果 15 秒没有发送心跳包,就让 eureka 把自己从服务列表中移除
    lease-expiration-duration-in-seconds: 15
  client:
    service-url:
      # 将当前 springboot 服务注册到所有的 eureka 中,多个地址以英文逗号分隔
      defaultZone: http://eureka-server1:8761/eureka,http://eureka-server2:8762/eureka,http://eureka-server3:8763/eureka
    # 是否将自己的路径注册到 eureka 上
    register-with-eureka: true
    # 是否需要从 eureka 中抓取路径
    fetch-registry: true

# 集群需要使用相同的 application 名称
spring:
  application:
    name: consumer-App

增加restTemplateConfig用于简化调用rest接口方式(主要方便测试):

@Configuration
public class RestTemplateConfig {

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        // RestTemplate 简化了调用 Restful 接口的开发方式
        return new RestTemplate();
    }
}

增加controller层:

@RequestMapping("/consumer")
@RestController
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/getdata/{id}")
    public Map GetData(@PathVariable("id") int id) {

        //使用服务在 eureka 上注册的 application 名称代替 ip 和端口号
        String url = "http://PROVIDER-APP/provider/getdata/" + id;
        Map result = restTemplate.getForObject(url, Map.class);
        return result;
    }
}

同理生产者,在启动类中亦需要记得:@EnableEurekaClient

最后访问浏览器中访问生产者请求地址或者消费者请求地址,成功访问即可。

备注:actuator组件为程序监控,相关配置见于eureka注册服务的配置文件application,同时需要在pom文件中添加以下依赖:


    org.springframework.boot
    spring-boot-starter-actuator

每一个服务都可添加该组件,主要用于监控程序的相关信息,可以在eureka的监控页面对应的info看到自定义的info信息(配置在application配置文件,详情请自行;同时,注意生产环境中如果有使用该组件一定要做相关的权限访问控制,不然会暴露系统内部各种信息,信息泄漏的风险极大。相关学习地址:Spring boot——Actuator 详解_actuator springboot_奋斗喝咖啡的博客-CSDN博客)

你可能感兴趣的:(微服务,eureka,微服务,java)