Spring-Cloud+Eureka微服务的注册与实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011831754/article/details/79154906

Eureka微服务的注册与实现

  • 服务注册表:是服务注册发现组件的核心,用于记录各个微服务的信息,如微服务的名称、IP、端口
  • 服务注册与服务发现:服务注册时指微服务启动时把自己的信息注册到服务发现组件上的过程。服务发现是指查询可用微服务列表及其网络地址的机制
  • 服务检查:服务发现组件使用一定机制定时检测已注册的服务,如发现某实例长时间无法访问,就会从注册表中移除此实例

Eureka

Eureka是Netflix开源的服务发现组件,本身是一个基于REST的服务。它包含Server和Client两部分。SpringCloud将它集成在子项目SpringCloud Netflix中,从而实现了微服务的注册与发现

编写Eureka Server

1、创建maven工程,并添加以下依赖

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

2、编写启动类,在启动类想添加@EnableEurekaServer注解,声明这是一个Eureka Server

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

3、在配置文件application.yml中添加yml中添加以下内容。

server:
  port: 8761                    # 指定该Eureka实例的端口
eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

属性解释:
client:registerWithEureka: 表示是否将自己注册到Eureka Server,默认为true。由于当前应用是Eureka Server,设为false
client:fetchRegistry: 表示是否从Eureke Server获取注册信息
client:serviceUrl:defaultZone: 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。多个地址可用逗号分隔

将微服务注册到Eureka Server上

1、在服务中添加以下依赖

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

2、在配置文件中添加以下配置

spring:
  application:
    name: microservice-provider-user
eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka,http://peer2:8761/eureka
  instance:
    prefer-ip-address: true

3、编写启动类

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

Eureka Server的高可用

1、将Eureka Server的application.yml修改如下让两个节点的Eureka Server可以相互注册

spring:
  application:
    name: microservice-discovery-eureka-ha
---
spring:
  profiles: peer1                                 # 指定profile=peer1
server:
  port: 8761
eureka:
  instance:
    hostname: peer1                               # 指定当profile=peer1时,主机名是peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:8762/eureka/      # 将自己注册到peer2这个Eureka上面去

---
spring:
  profiles: peer2
server:
  port: 8762
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/

2、打包项目,并使用spring.profiles.active=*的方式启动

3、client中的对应参数(defaultZone)用逗号隔开

Eureka 的元数据

eureka的元数据有两种,标准元数据和自定义元数据。
标准元数据指的是主机名、Ip地址、端口号、状态页和健康检查等信息,这些信息都会被发布在服务注册表中。自定义元数据可以使用eureka.instance.metadata-map配置,这些元数据可以在远程客户端中访问,但一般不会改变客户端的行为。

1、修改application.yml,使用eureka.instance.metadata-map属性为服务添加自定义的元数据:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true
    metadata-map:
      my-metadata: 我自定义的元数据       # 自定义的元数据,key/value都可以随便写。

2、微服务中可以通过如下代码进行微服务的访问

  @GetMapping("/user-instance")
  public List<ServiceInstance> showInfo(){
      return this.discoveryClient.getInstances("microservice-provider-user");
  }

会得到以下结果:

[{
    "host": "192.168.50.187",
    "port": 8000,
    "metadata": {
        "my-metadata": "我自定义的元数据"
    },
    "secure": false,
    "uri": "http://192.168.50.187:8000",
    "instanceInfo": {
        "instanceId": "Lisy-PC:microservice-provider-user:8000",
        "app": "MICROSERVICE-PROVIDER-USER",
        "appGroupName": null,
        "ipAddr": "192.168.50.187",
        "sid": "na",
        "homePageUrl": "http://192.168.50.187:8000/",
        "statusPageUrl": "http://192.168.50.187:8000/info",
        "healthCheckUrl": "http://192.168.50.187:8000/health",
        "secureHealthCheckUrl": null,
        "vipAddress": "microservice-provider-user",
        "secureVipAddress": "microservice-provider-user",
        "countryId": 1,
        "dataCenterInfo": {
            "@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo",
            "name": "MyOwn"
        },
        "hostName": "192.168.50.187",
        "status": "UP",
        "leaseInfo": {
            "renewalIntervalInSecs": 30,
            "durationInSecs": 90,
            "registrationTimestamp": 1516784623618,
            "lastRenewalTimestamp": 1516784743510,
            "evictionTimestamp": 0,
            "serviceUpTimestamp": 1516784623098
        },
        "isCoordinatingDiscoveryServer": false,
        "metadata": {
            "my-metadata": "我自定义的元数据"
        },
        "lastUpdatedTimestamp": 1516784623619,
        "lastDirtyTimestamp": 1516784623004,
        "actionType": "ADDED",
        "asgName": null,
        "overriddenStatus": "UNKNOWN"
    },
    "serviceId": "MICROSERVICE-PROVIDER-USER"
}]

方便进行服务调用

阅读更多

没有更多推荐了,返回首页