Spring Cloud服务发现框架Eureka配置

在 SpringCloud 之中使用了大量的Netflix 的开源项目,而其中 Eureka 就属于Netflix 提供的发现服务组件,所有的微服务在使用之中全部向 Eureka 之中进行注册,而后客户端直接利用 Eureka 进行服务信息的获取。


Eureka服务端配置:

1、在pom.xml追加相应的依赖支持库,这里新建的是一个maven新项目

<dependency>

                          <groupId>org.springframework.cloud</groupId>

                          <artifactId>spring-cloud-starter-eureka-server</artifactId>

                  </dependency>

                  <dependency>

                          <groupId>org.springframework.cloud</groupId>

                          <artifactId>spring-cloud-starter-config</artifactId>

扫描二维码关注公众号,回复: 864757 查看本文章

                  </dependency>

                  <dependency>

                          <groupId> org.mybatis.spring.boot</groupId>

                          <artifactId> mybatis-spring-boot-starter</artifactId>

                  </dependency>

2、修改加载配置文件,这里使用的是yml文件配置,在这个配置文件里面主要进行 eureka 服务的定义。

server:

port: 10086

 eureka:

instance: # eureak实例定义

hostname: eureka-hezhiyu-10086.com # 定义 Eureka 实例所在的主机名称

3、修改 hosts 配置文件,追加 eureka 的映射地址。

127.0.0.1    eureka-hezhiyu-10086.com

4、修改 Eureka 程序启动类,追加有 Eureka 服务声明

importorg.springframework.boot.SpringApplication;

importorg.springframework.boot.autoconfigure.SpringBootApplication;

importorg.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication

@EnableEurekaServer

publicclass Eureka_10086_StartSpringCloudApplication {

         public static void main(String[] args){

                  SpringApplication.run(Eureka_10086_StartSpringCloudApplication.class,args);

         }

}

5、访问路径:http:// eureka-hezhiyu-10086.com:10086/  

 

向 Eureka 中注册微服务

现在 Eureka 已经可以正常启用了,那么就需要在项目之中将所有的微服务信息注册到 Eureka 服务之中,这样就可以被客户端执行并且调用了。

1、客户端修改 pom.xml 配置文件,追加有eureka 的相关依赖支持包;

         <dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-eureka</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-config</artifactId>

</dependency>

2、修改 application.yml 配置文件,在这个配置文件之中主要是定义要进行注册的 Eureka 服务的地址,而这个地址就是 Eureka 的客户端配置。

eureka:

 client: # 客户端进行Eureka注册的配置

 service-url:

 defaultZone: http://eureka-hezhiyu-10086.com:10086/eureka

3、修改项目的运行主类,在这个主类上追加有Eureka 客户端的启用注解:

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication

@EnableEurekaClient

public class Client_StartSpringCloudApplication {

public static void main(String[] args) {

SpringApplication.run(Client_StartSpringCloudApplication.class,args);

}

}

此时由于存在有“@EnableEurekaClient”注解信息,所以当服务启动之后该服务会自动注册到Eureka服务器之中;

4、修改application.yml配置文件,为此微服务设置一个名字(这个名字将作为日后负载均衡)

spring:

 application:

 name: cloud-provider-client

Eureka 发现管理

在实际的项目运行过程之中需要通过 Eureka 作为所有微服务的监控处理程序,但是对于监控程序那么就必然要面临以下问题:

 · 新服务追加的时候应该立刻可以进行注册;

 · 当某一个服务下线之后应该可以进行清理;

1、修改Eureka项目设置服务的清理间隔,修改 application.yml 配置文件

server:

 port: 10086

spring:

 application:

 name: cloud-provider-client.com

eureka:

 server:

 eviction-interval-timer-in-ms: 1000 # 设置清理的间隔时间,而后这个时间使用的是毫秒单位(默认是60秒)

 client: # 客户端进行Eureka注册的配置

 service-url:

 defaultZone:http://eureka-hezhiyu-10086.com:10086/eureka

 register-with-eureka: false # 当前的微服务不注册到eureka之中

 fetch-registry: false # 不通过eureka获取注册信息

 instance: # eureak实例定义

 hostname: eureka-hezhiyu-10086.com # 定义 Eureka 实例所在的主机名称

一旦配置了清理的间隔为 1 秒的时间,则会在每秒的时候进行一次服务的清理过程,会出现如下错误提示信息:

10:58:44.894 INFO 6628 ---[a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry :

Running the evict task withcompensationTime 0ms

一般情况下,该配置不建议进行修改,默认就是 60 秒,也就是说你的微服务如果 60 秒没有心跳了,那么就认为可以清理掉。

2、在 Eureka 里面有一个问题,这个问题就是它默认支持有保护模式的概念,所谓的保护模式指的是即便现在某一个微服务不可用了,eureka 不会清理,依然会进行该微服务信息的保存。

如果现在要想去改变这种保护模式的启用,则可以修改 application.yml 配置文件:

enable-self-preservation: false # 设置为false表示关闭保护模式

3、微服务客户端之所以可以与 Eureka 之间保持联系,依靠的是心跳机制,也就是说你客户端 可以自己来进行心跳的配置处理,修改 application.yml 配置文件:

eureka:

 client: # 客户端进行Eureka注册的配置

 service-url:

 defaultZone:http://eureka-hezhiyu-10086.com:10086/eureka

 instance:

 lease-renewal-interval-in-seconds: 2 # 设置心跳的时间间隔(默认是30秒)

 lease-expiration-duration-in-seconds: 5 # 如果现在超过了5秒的间隔(默认是90秒)

 instance-id: cloud-provider-client.com # 在信息列表时显示主机名称

 prefer-ip-address: true # 访问的路径变为 IP 地址

4、测试:现在对于注册到 Eureka 上的微服务端也可以通过发现服务来进行一些服务信息的获取

import javax.annotation.Resource;

importjavax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.PathVariable;

importorg.springframework.web.bind.annotation.RequestBody;

importorg.springframework.web.bind.annotation.RequestMapping;

importorg.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

importcn.mldn.microcloud.service.IDeptService;

import cn.mldn.vo.Dept;

@RestController

public class DeptRest {

         @Resource

         privateIDeptService deptService ;

         @RequestMapping("/dept/sessionId")

         publicObject id(HttpServletRequest request) {

                  returnrequest.getSession().getId() ;

         }

        

         @RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET)

         publicObject get(@PathVariable("id") long id) {

                  returnthis.deptService.get(id) ;

         }

         @RequestMapping(value="/dept/add",method=RequestMethod.POST)

         publicObject add(@RequestBody Dept dept) {

                  returnthis.deptService.add(dept) ;

         }

         @RequestMapping(value="/dept/list",method=RequestMethod.GET)

         publicObject list() {

                  returnthis.deptService.list() ;

         }

}

5、在微服务客户端启动类上加上@EnableDiscoveryClient启用 Eureka 发现服务项

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication

@EnableEurekaClient

@EnableDiscoveryClient

public class Client_StartSpringCloudApplication {

public static void main(String[] args) {

SpringApplication.run(Client_StartSpringCloudApplication.class,args);

}

}

访问到通过调用Eureka管理后的数据:

{"services":[],"localServiceInstance":{"host":"192.168.31.247",

"port":10086,"secure":false,"serviceId":"cloud-provider-client","metadata":{},"uri":"http://192.168.31.247:10086"}}

猜你喜欢

转载自blog.csdn.net/qq_28524127/article/details/79589919