A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大蓝鲸小蟀锅 于 2018-3-24 15:27 编辑

[南京校区] 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>
                  </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-itheima-10086.com # 定义 Eureka 实例所在的主机名称

3修改 hosts 配置文件,追加 eureka 的映射地址。
127.0.0.1    eureka-itheima-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-itheima-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:

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:
register-with-eureka: false # 当前的微服务不注册到eureka之中
fetch-registry: false # 不通过eureka获取注册信息
instance: # eureak实例定义
hostname: eureka-itheima-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:
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"}}

2 个回复

倒序浏览
6666
回复 使用道具 举报
棒棒哒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马