关系调用:
服务生产者启动时,向服务注册中心注册自己提供的服务。
服务消费者启动时,向服务注册中心订阅自己需要的服务。
注册中心会返回服务提供者的地址信息给消费者。
消费者则从服务提供者调用服务。
使用Eureka进行服务治理:
首先搭建注册中心,为了以后项目能在此基础上继续开发,所以选择了基于maven建立模块化。
建立父项目POM
这是基本的架子,后续可增加配置中心以及其他的服务。
先看一下父pom文件中的配置,项目搭建可参考:
4.0.0
com.zhaixingzu
yyc
1.1.0-SNAPSHOT
pom
yyc
yyc-pom
yyc-registry
2.1.3.RELEASE
Greenwich.RELEASE
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
下来建立yyc-registry
在yyc-registry中添加pom的配置信息:
4.0.0
com.zhaixingzu
yyc
1.1.0-SNAPSHOT
yyc-register
jar
yyc-register
yyc 注册中心
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.cloud
spring-cloud-starter-security
org.springframework.boot
spring-boot-starter-web
spring-boot-starter-tomcat
org.springframework.boot
org.springframework.boot
spring-boot-starter-undertow
org.springframework.boot
spring-boot-maven-plugin
在RegistryApplication中我们添加注解
package com.zhaixingzu.yyc.registry;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* 服务注册中心
* @author Herbert
* @date 2019年06月19日
*/
@EnableEurekaServer
@SpringBootApplication
public class RegistryApplication {
public static void main(String[] args) {
SpringApplication.run(RegistryApplication.class, args);
}
}
在application.properties中添加配置信息:
server.port=9900 spring.application.name=yyc-registry spring.security.user.name=admin spring.security.user.password=admin spring.application.admin.enabled=false eureka.instance.hostname=127.0.0.1 eureka.instance.prefer-ip-address=true #是否开启自我保护(运行期间spring会统计信条失败的比例在15分钟之内是否低于85%,如果不低于85%,Eureka会将实例注册信息保护起来,让这些实例不会过期) eureka.server.enable-self-preservation= false #3秒钟自动剔除失效的节点,清理无效的节点 eureka.server.eviction-interval-timer-in-ms= 3000 #eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上 eureka.server.response-cache-update-interval-ms= 3000 #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。 #由于启用了evict其实就用不太上改这个配置了 #默认180s eureka.server.response-cache-auto-expiration-in-seconds=180 #不要向注册中心注册自己 eureka.client.register-with-eureka=false #禁止检索服务 设置为true可以从其他eureka节点获取注册信息 eureka.client.fetch-registry=false #设置与eureka交互的地址 eureka.client.service-url.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/
到此所有的配置已经完成,直接启动启动类:
访问页面:
输入账号,密码:
注:从上图看到,在"Instances currently registered with Eureka"信息中,没有一个实例,说明目前还没有服务注册。
注册中心启动完成
下来记录其中重点笔记:
1:在父级项目yyc中定义的maven包为pom,引用了一些SpringCloud项目常用的一些依赖包,这样在每一个子项目中就不会再去依赖
2:子项目yyc-registry中排除了springboot用tomcat作为内嵌容器,引进了undertow容器,tomcat和undertow的负载能力基本差不多。引进的原因是因为undertow为轻量级容器,比Jeety性能稍优
3:@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan
4:application.properties 和 application.yml 中对配置没有任何区别,yml的配置文件可增强可读性,在书写方面也比较方便
5:如需要开启密码认证,需要进行安全配置:
引人Jar包
并且在application中进行配置用户名与密码:
设置与eureka的交互地址:
eureka.client.service-url.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/
6:配置信息详解:
server:
port: 9900
spring:
application:
name: yyc-registry
security:
user:
name: admin
password: admin
cloud:
config:
enabled: false
eureka:
instance:
hostname: 127.0.0.1
prefer-ip-address: true
server:
#是否开启自我保护(运行期间spring会统计信条失败的比例在15分钟之内是否低于85%,如果不低于85%,Eureka会将实例注册信息保护起来,让这些实例不会过期) enable-self-preservation: false eviction-interval-timer-in-ms: 3000 #3秒钟自动剔除失效的节点,清理无效的节点 response-cache-update-interval-ms: 3000 #eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上 response-cache-auto-expiration-in-seconds: 180 #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。 #由于启用了evict其实就用不太上改这个配置了 #默认180s client: register-with-eureka: false #不要向注册中心注册自己 fetch-registry: false #禁止检索服务 设置为true可以从其他eureka节点获取注册信息 service-url: defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/ #设置与eureka交互的地址
7: 对于配置application.yml 和 bootstrap.yml 的区别:
8:Eureka中启动成功后显示红色标记(如下图)
系统在三种情况下会出现红色加粗的字体提示:
a.在配置上,自我保护机制关闭
RENEWALS ARE LESSER THAN THE THRESHOLD. THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
b.自我保护机制开启了
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE
NOT BEING EXPIRED JUST TO BE SAFE.
c.在配置上,自我保护机制关闭了,但是一分钟内的续约数没有达到85% , 可能发生了网络分区,会有如下提示
THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
9:在启动加入banner.txt可以出现banner自定义样式
推荐阅读:
Spring Cloud Alibba教程:Sentinel的使用
Spring Cloud微服务如何设计异常处理机制?
苏宁Spring Cloud微服务脚手架工具vole实践分享
原文阅读:
https://zhuanlan.zhihu.com/p/69911648