您的位置:首页 > 编程语言 > Java开发

springcloud入门之综合入门小案例

2017-12-07 10:24 597 查看
经过一个多星期的springcloud学习,今天尝试使用springcloud搭建一个比较符合实际开发的综合案例,包括一个分布式系统项目所包含的基本工程:eureka注册中心,注册到eureka的服务客户端client,服务消费者ribbon,配置服务中心spring cloud config,以及网关路由zuul。

一、搭建注册中心 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring-cloud 分布式