springCloud微服务学习总结
2016-11-02 15:54
225 查看
SpingCloud微服务学习总结
首先springCloud是基于springboot来构建的,应该先了解springboot的特征。eureka用来管理服务register与discovery,构建microService比较简单,只需要@EnableEurekaServer,@EnableEurekaClient两注解。
spingCloud的熔断机制Circuit。
统一的服务实例监控软件,@EnableHystrixDashboard
服务client的负载均衡Ribbon,RestTemplate底层通过Ribbon来实现load balance的访问server。
Zookeeper在springCloud中集成,通过apache Curator的开源client,Zookeeper能支持服务注册与发现。但我只使用zookeeper的分布式configuration。
7.我的springCloud 代码工程例子:https://git.oschina.net/andrexu2015/mindSpringCloudMicroDemo,欢迎下载。
### 1. spingBoot简单介绍
package com.calm.b; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.ImportResource; @Configuration @ComponentScan("com.calm.*") @EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class) @ImportResource(value = {"applicationContext.xml"}) @EnableAspectJAutoProxy public class BizApplication { /** * 程序的启动入口 * * @param args */ public static void main(String[] args) { // SpringApplication.run(BizApplication.class, args); new SpringApplicationBuilder(BizApplication.class).web(true).run(args); } }
构建spingboot工程,只需要在所有package目录最根层建立一个main方法class,配上@Configuration,@ComponentScan,@EnableAutoConfiguration注解就能够启动springBoot程序,@SpringBootApplication是前三个注解默认配置的。
1. @Configuration 代表该component是一个spring容器定义的配置bean。
2. @ComponentScan 代表spring容器需要扫表java组件包路径范围。默认是当前class所有在包位置。
3. @EnableAutoConfiguration 启动自动获取配置的开关,exclude是指可以在排除需要的configuration bean。
2. eureka的discovery与register
@EnableEurekaServer 代表服务管理的服务方,在main class上添加注册,参考例子cloud-eureka-server。它提供管理界面,http://localhost:8761/
@EnableEurekaClient 客户端则使用这个注解,参考例子cloud-simple-service。
server与client 的bootstrap.properties配置如下:
#service discovery url eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
eureka客户端与服务端之间交互应该知道其原理,EurekaClient 类是其主要组件,可以获取server端的所有注册信息,例子代码:
@RequestMapping(value = "/monitor") public void getDishSetmealGroup(HttpServletRequest request, HttpServletResponse response) throws ServletRequestBindingException { InstanceInfo instanceInfo = discoveryClient.getNextServerFromEureka("cloudSimpleService", false); System.out.println(instanceInfo.getHealthCheckUrl()); serviceUrl(); } public String serviceUrl() { // discoveryClient.geti List<InstanceInfo> list = discoveryClient.getInstancesById("my-THINK:cloudSimpleService:8082"); if (list != null && list.size() > 0) { System.out.println(list.get(0).getHomePageUrl()); } Application application = discoveryClient.getApplication("cloudSimpleService"); list = application.getInstances(); if (list != null && list.size() > 0) { System.out.println(list.get(0).getHealthCheckUrl()); } return null; }
通过eureka服务端可以,http://localhost:8761/eureka/apps可以查看一个xml结构式所有注册信息
<instanceId>my-THINK:cloudSimpleService:8082</instanceId> <hostName>my-THINK</hostName> <app>CLOUDSIMPLESERVICE</app> <ipAddr>192.168.7.197</ipAddr> <status>UP</status> <overriddenstatus>UNKNOWN</overriddenstatus> <port enabled="true">8082</port> <securePort enabled="false">443</securePort> <countryId>1</countryId> <dataCenterInfo class="com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo"> <name>MyOwn</name> </dataCenterInfo>
7.参考如下http://www.tuicool.com/articles/JBbU3mY ,描述EurekaClient的注册过程。
3. Circuit熔断器例子
参考spring 官方文档4. HystrixDashboard使用介绍
参考spring 官方文档5. Ribbon负载均衡的例子
我们通过RestTemplate来构建负载均衡,@LoadBalanced 标志@Configuration public class BeanConfiguration { @LoadBalanced @Bean // @Order() public RestTemplate restTemplate(){ return new RestTemplate(); } }
@Service("usserService") public class UserService { @Resource private RestTemplate restTemplate; private static final Logger logger = LoggerFactory.getLogger(UserService.class); final String SERVICE_NAME = "cloudSimpleService"; // @HystrixCommand(fallbackMethod = "fallbackSearchAll") public List<User> searchAll() { logger.info("===================================="); List<User> users=null; try{ users=restTemplate.getForObject("http://" + SERVICE_NAME + "/user", List.class); }catch(Exception e){ e.printStackTrace(); } logger.info("===================================="); return users; } public List<User> searchAllTwo() { logger.info("===================================="); List<User> users=null; try{ users=restTemplate.postForObject("http://" + SERVICE_NAME + "/user",null, List.class); //restTemplate.exchange(url, method, requestEntity, responseType) //restTemplate.delete(url); }catch(Exception e){ e.printStackTrace(); } logger.info("===================================="); return users; }
主要通spring.application.name=cloudSimpleService 名字+url来访问具体的服务。
6. zookeeper分布式配置信息集成。
这个只介绍zookeeper与springCloud集成的分布式配置。分两种配置基于服务实例之上的全局配置,基于服务的自己配置。
基于zookeeper,zkui服务的的配置结构如下:
要注意zkui配置文件node结构,
dev –代表自己的环境
– apps:customized – 所有appInstance配置
– cloudSimpleService –测试的服务应用
— —该app自己的属性定义
#App Config Dashboard (ACD) dump created on :Wed Nov 02 15:09:00 CST 2016 /configurations/mind/dev/apps=foo=bar /configurations/mind/dev/apps:customized=foo=bar /configurations/mind/dev/apps:customized/customized=age=22222222222 /configurations/mind/dev/apps:customized/customized=foo=bar /configurations/mind/dev/cloudSimpleService=foo=bar /configurations/mind/dev/cloudSimpleService/customized=foo=bar /configurations/mind/dev/cloudSimpleService/customized=password=1wswddewwpassword /configurations/mind/dev/cloudSimpleService/customized=userName=user12345andrex /configurations/mind/dev/cloudSimpleService/mysqldb=foo=bar /configurations/mind/dev/tradeAnalyzer=andrexu2=11 /configurations/mind/dev/tradeAnalyzer=foo=bar /configurations/mind/dev/tradeAnalyzer=testUserNode=12433
服务端的配置如下:
#service name spring.application.name=cloudSimpleService spring.profiles.active=dev,datasource,mail,customized # zookeeper所有集群address spring.cloud.zookeeper.connectString=testzk1.shishike.com:2181,testzk2.shishike.com:2181,testzk3.shishike.com:2181 #是否开启zookeeper使用 spring.cloud.zookeeper.config.enable=true #zokkeeper配置的根目录 spring.cloud.zookeeper.config.root=/configurations/mind/dev spring.cloud.zookeeper.config.defaultContext=apps spring.cloud.zookeeper.config.profileSeparator=:
使用springBoot配置与bean映射功能,测试get属性是否能获取zookeeper配置的值。
@Component @ConfigurationProperties(prefix="customized") public class CustomizedProperties { //@NotNull private String userName; //@NotNull private String password; private String age; public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
相关文章推荐
- Spring Cloud与微服务学习总结(4)——认证鉴权与API权限控制在微服务架构中的设计与实现(二)
- Spring Cloud与微服务学习总结(2)——Spring Cloud相较于Dubbo等RPC服务框架的优势
- Spring Cloud与微服务学习总结(5)——认证鉴权与API权限控制在微服务架构中的设计与实现(三)
- Spring Boot和Spring Cloud微服务架构学习(五)-Docker总结
- Spring Cloud与微服务学习总结(1)——Spring Cloud及微服务入门
- Spring Cloud与微服务学习总结(3)——认证鉴权与API权限控制在微服务架构中的设计与实现(一)
- Spring Cloud与微服务学习总结(1)——Spring Cloud及微服务入门
- Spring Boot和Spring Cloud微服务架构学习(六)-Docker应用
- SpringCloud 服务发现组件 Eureka的初步学习
- spring-cloud 学习四 服务网关
- 基于Spring Boot和Spring Cloud实现微服务架构学习(二)-Spring Boot总结
- spring cloud微服务权限认证学习笔记
- SpringCloud 学习 | 第四篇: 服务消费者 feign
- .net MVC, webAPI,webForm集成steeltoe+springcloud实现调用服务中心服务的总结
- 基于Spring Boot和Spring Cloud实现微服务架构学习(五)-Docker总结
- 学习 Spring-Cloud - 写一个微服务
- SpringCloud 学习 | 第一篇: 高可用的服务注册与发现(Eureka)
- Spring Cloud学习--服务网关(Zuul)
- Spring Cloud 学习笔记4——监控、熔断及服务追踪
- 微服务开发架构——Spring Cloud常见问题与总结<二>Hystrix/Feign 整合Hystrix后首次请求失败