微服务深入浅出(3)-- 服务的注册和发现Eureka
现来说一些Eureka的概念:
1、服务注册 Register
就是Client向Server注册的时候提供自身元数据,比如IP和Port等信息。
2、服务续约 Renew
Client默认每隔30s发送一次心跳来服务续约,如果90s没有收到Client的心跳包,Server会将Client从注册列表中移除。
3、获取服务注册信息 Fetch Register
Eureka Client会从Eureka Server获取服务注册表信息,并将其缓存在本地。默认每30s更新一次。
4、下线 Cancel
Eureka Client在程序关闭的时候可以向Eureka Server发送下线请求立即移除注册表信息,需要手动调用代码:
5、LoadBalancer缓存
Ribbon在客户端维护了缓存定时刷新,避免每个请求都从Server获取注册信息,所以新注册的Provider可能会出现延迟。
DiscoveryManager.getInstance().shutdownComponent();
搭建Eureka Server
配置文件:
server:
port: 9001
eureka:
instance:
hostname: localhost
prefer-ip-address: true
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:9001/eureka/
启动类加注解@EnableEurekaServer:
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication { public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
访问:http://localhost:9001/
Eureka服务注册
配置文件:
server:
port: 9006
spring:
application:
name: hi-service
eureka:
client:
service-url:
defaultZone: http://localhost:9001/eureka/
启动类加注解@EnableEurekaClient:
@SpringBootApplication
@EnableEurekaClient
public class DemoApplication { public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Eureka服务发现
配置文件:
server:
port: 9008
spring:
application:
name: eureka-consumer
eureka:
client:
service-url:
defaultZone: http://localhost:9001/eureka/
启动类加注解@EnableEurekaClient:
@SpringBootApplication
@EnableEurekaClient
public class DemoApplication { public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Service层访问:
@Service
public class RibbonService {
@Autowired
RestTemplate restTemplate; public String hi() {
return restTemplate.getForObject("http://hi-service/hi", String.class);
}
}
可以看到,url已经使用application name去代替了ip+port的信息去请求服务。如果Eureka Service provider在配置文件中没有配置serviceId,则默认为配置文件中的服务名,也就是${spring.application.name}。
创建Eureka Server服务集群
多profile格式配置文件application.yml
spring:
application:
name: discovery-cluster
---
spring:
profiles: discovery1
server:
port: 8761
eureka:
instance:
hostname: discovery1
client:
service-url:
default-zone: http://discovery2:8762/eureka ---
spring:
profiles: discovery2
server:
port: 8762
eureka:
instance:
hostname: discovery2
client:
service-url:
default-zone: http://discovery1:8761/eureka
配置文件是通过两个Eureka Server互相注册,这里有三段配置,第一段配置为公共配置,配置了应用名称,第二段为名discovery1
的配置,第三段为discovery2
的配置。在项目启动可以通过 --spring.profiles.active={配置名称}
来启动不同的配置。
java -jar discovery-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=discovery1
java -jar discovery-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=discovery2
在client端,只需要把 eureka.client.serviceUrl.defaultZone
改成相应的集群地址即可,多个服务用逗号分隔:
eureka
client
serviceUrl
defaultZone = http://discovery1:8761/eureka,http://discovery2:8761/eureka
最新文章
- 开发android App干坏事(一)
- JSP网站开发基础总结《八》
- C语言中的回调函数调用过程以及函数指针使用
- CMS .NET 程序框架 从2.0/3.5升级到4.0 版本后 需要调整的地方
- IOS第一天多线程-01pthread
- 设计模式-01-MVC
- 第二个Sprint冲刺第二天
- 在C#中dagagridview绑定list泛型
- WCF、Web API、WCF REST、Web Service之区别
- .Net程序员快速学习安卓开发-布局和点击事件的写法
- DOM中的动态NodeList与静态NodeList
- JAVA WEB 中涉及的编解码
- ASP.NET网络爬虫小研究 HtmlAgilityPack基础,爬取数据保存在数据库中再显示再自己的网页中
- java8-Stream之数值流
- ScalaPB(5):用akka-stream实现reactive-gRPC
- python 批量ping脚本不能用os.system
- Qt信号槽第5个参数
- Angular2入门:TypeScript的类 - 定义、继承和作用域
- Intellij Idea 使用时总是打开上次的项目
- POJ-1191-棋盘分割(动态规划)
热门文章
- VNC Server (Ubuntu 16.04.3 GNOME)
- 微信小程序 功能函数 购物车商品删除
- 优先级:P0
- 转载manifold learning一篇
- Find Common Characters - LeetCode
- 观V8源码中的array.js,解析 Array.prototype.slice为什么能将类数组对象转为真正的数组?
- shiro权限认证与授权
- 2.Helloworld
- 300. Longest Increasing Subsequence_算法有误
- ssh或scp自动化问题