背景
跟着微办事的风行,基于Spring生态的Spring Cloud越来越被存眷, Spring Cloud专注于供给优胜的开箱即竽暌姑的典范用例和可扩大性覆盖机制。
特点
- 分布式/版本化设备
- 办事注册和发明
- 路由
- service - to - service调用
- 负载均衡
- 断路器
Spring cloud包含两个根本模块,spring cloud context和spring cloud commons。
- @FeignClient(name = "heimdall", url="${express.open.url}",
- configuration = RemoteConfiguration.class)
- public interface RemoteExpressService {
- //@Headers({"Content-Type: application/x-www-form-urlencoded","Accept: application/x-www-form-urlencoded"})
- @RequestMapping(method = RequestMethod.POST, value = "/express/api/v1/addModifySite")
- @ResponseBody
- ApiResponse addModifySite(SiteDTO siteDTO);
- }
spring cloud context即spring cloud应用高低文,包含引导高低文(加载bootstrap设备)、设备加密、设备刷新范围(RefreshScope)、控制端点(/env/reset,/refresh,/restart等)功能。
Spring cloud commons 供给办事注册发明,负载均衡,断路器等模式的一个共用抽象层,为具表实际供给同一抽象。
Consul 是应用Go开辟的开源的办事发明和健康检查的对象.Consul还供给K/V存储.可以很便利的应用Consul集群搭建高可用的微办事基本架构. Consul还包含web ui 可以查看各办事状况.
线上consul地址: http://consul.nidianwo.com/
如下截图:
因为consul内置了办事注册发明功能,所以spring cloud consul代码实现上比较简单,应用ConsulServiceRegistry进行办事注册操作,应用ConsulDiscoveryClient获取所有办事或者up的办事,内部则是应用ConsulClient请求consul集群进行操作。
在应用过程中出现了一个问题,一个办事多个机械注册的时刻有时注册的办事会被覆盖,查看源码发明,应用servlet容器初始化事宜被监听之后会进行consul应用的主动注册,注册应用ConsulAutoRegistration对象,内部会有一个NewService对象,经由过程NewService对象的id断定办事的独一性,而NewService的id默认是ApplicationContext对象的id,也就是应用名称加port加profile,所以同一个应用这个id是雷同的所以注册会被覆盖。 找到问题了那么就来解决问题吧,增长设备bean经由过程覆盖ConsulAutoRegistration对象,设置id为ApplicationContext的id加机械的ip包管应用多台机械的id独一。
- @Bean
- @Primary
- public ConsulAutoRegistration consulRegistration(ConsulDiscoveryProperties properties, ApplicationContext applicationContext, ServletContext servletContext, HeartbeatProperties heartbeatProperties) {
- properties.setInstanceId(applicationContext.getId()+"-"+ DigestUtils.sha1Hex(properties.getIpAddress()));
- return ConsulAutoRegistration.registration(properties, applicationContext, servletContext, heartbeatProperties);
- }
ConsulDiscoveryProperties这个类是consul办事发明的设备类,个一一些设备须要留意,比如preferIpAddress默认为false,即默认是经由过程host来进行办事的地址进行注册和检查,然则当情况不支撑host拜访时就会出问题,比如我们线上的阿里云情况,也有机械不支撑host拜访,所以须要设备preferIpAddress=true。
spring cloud config
Spring Cloud Config供给办事端和客户端在分布式体系中扩大设备。支撑不合情况的设备(开辟、测试、临盆)。应用Git做默认设备后端,可支撑设备情况打版本标签。
推荐阅读
近日,Google正式宣布了Android 8.0(奥利奥)。除了可见的界面和功能更新,Android 8.0在体系安然方面也做出了一些重要改变。不过,对于Android团队的安然人员来说,这只是漫长路程中的一>>>详细阅读
本文标题:Spring Cloud微服务实践
地址:http://www.17bianji.com/lsqh/37151.html
1/2 1