springcloud入门之综合入门小案例
2017-12-07 10:24
597 查看
经过一个多星期的springcloud学习,今天尝试使用springcloud搭建一个比较符合实际开发的综合案例,包括一个分布式系统项目所包含的基本工程:eureka注册中心,注册到eureka的服务客户端client,服务消费者ribbon,配置服务中心spring cloud config,以及网关路由zuul。
>
1.项目创建时选择的依赖:spring-cloud-starter-eureka-server
2.在项目启动类Application.class上添加@EnableEurekaServer注解表示项目是作为eureka注册中心启动的
3.在配置文件application.xml或application.yml配置相关属性如:注册中心端口,eureka相关配置
注:在默认设置下,eureka的服务注册中心也会将自己作为客户端注册自己,可以在application.properties配置文件中禁用这个功能
注册中心的配置属性:
eureka已经整合了页面功能,启动项目,浏览器访问url:localhost:1111 可以直接查看到注册中心状态。
1.确认项目依赖:spring-cloud-starter-eureka,spring-cloud-config-server
2.在项目启动类Application.class上添加@EnableConfigServer表示项目已配置服务器启动
3.在配置文件application.xml或application.yml配置相关属性如:服务端口,配置文件路径和账户密码
注:作为配置中心在项目启动的时候会默认自己注册自己,导致项目报错启动不了,需要在配置文件中配置禁止自身注册自己,本项目git仓库为测试仓库,可直接使用测试
配置中心的配置属性:
启动项目,可以通过一下url测试是否能够正常获取到git仓库中的配置信息
http://localhost:8040/microservice-config-client-dev.properties
http://localhost:8040/microservice-config-client/dev
按以下功能分析项目:
1.确认项目依赖:
spring-cloud-starter-eureka-server(eureka注册服务功能)
mybatis-spring-boot-starter(mybatis)
mysql-connector-java(mysql)
spring-boot-starter-web(web功能)
2.项目如果不增加其它功能,启动类Application.class正常启动就行
3.按以下功能分析项目:
注册中心属性配置:
mysql和mybatis属性配置:
注:服务在注册中心的注册的服务名称为大写
启动项目,可以看到eureka注册中心多了一个SERVICE-USER服务
输入url:http://localhost:8091/getUserByName?name=%E5%BC%A0%E4%B8%89 可以查看请求是否正常
1.确认项目依赖:
spring-cloud-starter-eureka(注册与消费eureka服务中心服务)
spring-cloud-starter-ribbon(ribbon功能)
spring-cloud-starter-hystrix(hystrix熔断器) <
4000
br>
spring-boot-starter-web(web功能)
2.在项目启动类Application.class上添加@EnableDiscoveryClient注册并订阅服务@EnableHystrix开启熔断器功能,同时加上
3.在配置文件application.xml或application.yml配置相关属性:注册中心地址
4.编写service类(ribbon方式实现调用服务和熔断器功能)
1.添加@Service注解实现注入容器
2.@Autowired方式注入RestTemplate,用于调用服务方法
3.调用 restTemplate.getForObject(“http://服务名称/mapper路径”,返回类.class);执行服务方法
4.在方法上使用注解@HystrixCommand(fallbackMethod = “method”)对该方法开启熔断功能并指定熔断的执行方法。
5.在service类声明方法“method”对应 fallbackMethod 指定的熔断方法,编写熔断业务,注意返回值要一致。
6.controller类,@Autowried注入service,调用方法
启动项目,浏览器输入 http://localhost:8093/findCityById?id=3 查看请求是否正常
分析项目搭建过程:
1.确认项目依赖:
spring-cloud-starter-eureka、spring-cloud-starter-feign、spring-boot-starter-web
2.根据项目定位和功能在项目启动类Application.class添加相应的注解开启功能
@EnableDiscoveryClient 发布和订阅服务
@EnableFeignClients 开启feign功能
3.在配置文件application.xml或application.yml配置相关属性:
注册中心地址
一、搭建注册中心 eureka-server
分析:搭建eureka注册中心主要分以下三点:>
1.项目创建时选择的依赖:spring-cloud-starter-eureka-server
2.在项目启动类Application.class上添加@EnableEurekaServer注解表示项目是作为eureka注册中心启动的
3.在配置文件application.xml或application.yml配置相关属性如:注册中心端口,eureka相关配置
注:在默认设置下,eureka的服务注册中心也会将自己作为客户端注册自己,可以在application.properties配置文件中禁用这个功能
注册中心的配置属性:
server.port=1111 eureka.instance.hostname=localhost eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
eureka已经整合了页面功能,启动项目,浏览器访问url:localhost:1111 可以直接查看到注册中心状态。
二、搭建配置中心 config-server
简单三步走:1.确认项目依赖:spring-cloud-starter-eureka,spring-cloud-config-server
2.在项目启动类Application.class上添加@EnableConfigServer表示项目已配置服务器启动
3.在配置文件application.xml或application.yml配置相关属性如:服务端口,配置文件路径和账户密码
注:作为配置中心在项目启动的时候会默认自己注册自己,导致项目报错启动不了,需要在配置文件中配置禁止自身注册自己,本项目git仓库为测试仓库,可直接使用测试
配置中心的配置属性:
eureka: client: register-with-eureka: false fetch-registry: false server: port: 8040 spring: application: name: microservice-config-server cloud: config: server: git: uri: https://github.com/eacdy/spring-cloud-study/ search-paths: config-repo username: password:
启动项目,可以通过一下url测试是否能够正常获取到git仓库中的配置信息
http://localhost:8040/microservice-config-client-dev.properties
http://localhost:8040/microservice-config-client/dev
三、搭建客户端服务 eureka-user-client
注册中心搭和配置中心建完了,接下来搭建一个客户端服务,为了贴近实际业务,整合mysql和mybatis实现对数据库操作功能。按以下功能分析项目:
1.确认项目依赖:
spring-cloud-starter-eureka-server(eureka注册服务功能)
mybatis-spring-boot-starter(mybatis)
mysql-connector-java(mysql)
spring-boot-starter-web(web功能)
2.项目如果不增加其它功能,启动类Application.class正常启动就行
3.按以下功能分析项目:
(1)作为客户端服务 client并实现注册到eureka功能: 在配置文件application.xml或application.yml配置相关属性:注册中心地址 (2)实现mybatis连接数据库mysql功能: 1.在配置文件application.xml或application.yml配置相关属性:数据源配置、mybatis配置(指定实体类包路径和mapper文件路径) 2.创建实体类pojo 3.创建dao层,加上注解@Mapper以实现注解注入容器 4.在resources/mapper下的mapper.xml文件(遵循mybatis开发准则,方法名和参数一致) 5.创建相应的service和service实现类,实现类加上注解@Service以实现注解注入容器,使用@Autowried注入dao 6.创建controller类,加上@EnableEurekaClient注解注册服务,使用@Autowried注入service
注册中心属性配置:
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
mysql和mybatis属性配置:
## 数据源配置 spring.datasource.url=jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=123 spring.datasource.driver-class-name=com.mysql.jdbc.Driver ## Mybatis 配置 mybatis.typeAliasesPackage=com.sc.eurekauserclient.pojo mybatis.mapperLocations=classpath:mapper/*.xml
注:服务在注册中心的注册的服务名称为大写
启动项目,可以看到eureka注册中心多了一个SERVICE-USER服务
输入url:http://localhost:8091/getUserByName?name=%E5%BC%A0%E4%B8%89 可以查看请求是否正常
四、使用Ribbon和RestTemplate搭建服务消费端 user-ribbon
分析user-ribbon搭建步骤(同时还要实现hystrix熔断器功能):1.确认项目依赖:
spring-cloud-starter-eureka(注册与消费eureka服务中心服务)
spring-cloud-starter-ribbon(ribbon功能)
spring-cloud-starter-hystrix(hystrix熔断器) <
4000
br>
spring-boot-starter-web(web功能)
2.在项目启动类Application.class上添加@EnableDiscoveryClient注册并订阅服务@EnableHystrix开启熔断器功能,同时加上
@Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); }开启ribbon负载均衡功能。
3.在配置文件application.xml或application.yml配置相关属性:注册中心地址
4.编写service类(ribbon方式实现调用服务和熔断器功能)
1.添加@Service注解实现注入容器
2.@Autowired方式注入RestTemplate,用于调用服务方法
3.调用 restTemplate.getForObject(“http://服务名称/mapper路径”,返回类.class);执行服务方法
4.在方法上使用注解@HystrixCommand(fallbackMethod = “method”)对该方法开启熔断功能并指定熔断的执行方法。
5.在service类声明方法“method”对应 fallbackMethod 指定的熔断方法,编写熔断业务,注意返回值要一致。
6.controller类,@Autowried注入service,调用方法
启动项目,浏览器输入 http://localhost:8093/findCityById?id=3 查看请求是否正常
五、使用Feign搭建服务消费端 user-feign
除了使用ribbon+restTemplate实现服务调用外,还可以使用feign实现,feign自带熔断器。分析项目搭建过程:
1.确认项目依赖:
spring-cloud-starter-eureka、spring-cloud-starter-feign、spring-boot-starter-web
2.根据项目定位和功能在项目启动类Application.class添加相应的注解开启功能
@EnableDiscoveryClient 发布和订阅服务
@EnableFeignClients 开启feign功能
3.在配置文件application.xml或application.yml配置相关属性:
注册中心地址
eureka: client: serviceUrl: defaultZone: http://localhost:1111/eureka/[/code]
开启feign熔断器功能feign.hystrix.enabled=true
4.创建service接口调用服务和熔断功能
类名上添加@FeignClient(value = “SERVICE-USER”,fallback = FeignServiceFallback.class)指定调用的服务名称以及熔断执行类
方法上添加注解@RequestMapping(value = “getCityById”,method = RequestMethod.GET)这个路径与请求方法是@FeignClient的服务的路径和请求
5.创建Fallback类
哪个service开启熔断需要实现对应service接口,可以多实现
在类上添加注解@Component以实现注入容器
重写接口方法已实现熔断业务,注意返回值和参数一致
6.controller调用service接口方法实现服务调用
启动项目,浏览器输入 http://localhost:8092/findCityById?id=3 查看请求是否正常六、搭建路由网关项目 service-zuul
一般来说我们不会直接对外提供请求路径,而是通过一个路由网关如zuul对外接受请求,同时但springcloud搭建的服务项目越来越多时,zuul还可以对各个服务进行路由转发,例如 /user/.. 转发到user服务器,/case/.. 转发到case服务器,zuul还可以作为反向代理和负载均衡功能。
搭建service-zuul项目,对前面的user-ribbon和user-feign进行转发:
1.确认项目依赖:
spring-cloud-starter-eureka(eureka发布和订阅)
spring-cloud-starter-zuul(zuul路由网关)
spring-boot-starter-web(web功能)
2.根据项目定位和功能在项目启动类Application.class添加相应的注解开启功能
@EnableEurekaClient 开启eureka发布和订阅功能
@EnableZuulProxy 开启zuul路由网关功能
3.在配置文件application.xml或application.yml配置相关属性:
注册中心eureka: client: serviceUrl: defaultZone: http://localhost:1111/eureka/[/code]
zuul相关配置zuul: routes: api-a: path: /api-a/** serviceId: SERVICE-FEIGN api-b: path: /api-b/** serviceId: SERVICE-RIBBON api-c: path: /userF/** serviceId: USER-FEIGN api-d: path: /userR/** serviceId: USER-RIBBON
启动项目,根据USER-FEIGN服务之前的请求 http://localhost:8092/findCityById?id=3
通过zuul请求USER-FEIGN服务输入请求: http://localhost:9003/userF/findCityById?id=3 也可以获取到返回结果
分析项目源码:https://pan.baidu.com/s/1bUYZLG
相关文章推荐
- MySQL入门笔记 —— 015 having综合案例讲解
- canvas学习笔记(下篇) -- canvas入门教程--保存状态/变形/旋转/缩放/矩阵变换/综合案例(星空/时钟/小球)
- 大数据入门第十三天——离线综合案例:网站点击流数据分析
- Activity入门---回传数据综合小案例(装备选择)
- mybatis增删改查综合案例
- Java学习笔记34(集合框架八:综合案例:模拟斗地主的洗牌发牌)
- JAVA 入门学习之路-注册登录案例。
- Oracle PL/SQL入门之案例实践(转)
- spring整合zookeeper与dubbo的入门案例(一)
- R语言快速入门_案例分析之考试成绩的回归分析
- 第114课(Scala版本)SparkStreaming+Kafka+Spark SQL+TopN+Mysql 电商广告点击综合案例实战
- MyBatis入门案例
- Hibernate 入门小案例
- Python爬虫(入门+进阶)学习笔记 1-8 使用自动化神器Selenium爬取动态网页(案例三:爬取淘宝商品)
- 网络综合管理工程案例——《案例精解企业级网络构建》抢鲜试读 推荐
- SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)
- android入门_采用android-async-http开源项目的GET方式或POST方式实现登陆案例
- Podcast Publisher——一个综合了多种入门知识的小Web应用
- 09_android入门_采用android-async-http开源项目的GET方式或POST方式实现登陆案例