本节主要介绍:实现服务注册、查找、负载功能
参考学习:
https://www.cnblogs.com/lenve/p/7985943.html
https://segmentfault.com/blog/spring-cloud
https://www.cnblogs.com/haly/category/1447424.html
一、注册Service服务(Restful服务)
1、创建springboot的maven工程,添加pom.xml依赖
<dependencies>
<!-- springcloud-eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.3.4.RELEASE</version>
</dependency>
<!-- 指定导入jackson包版本,避免eureka和boot冲突 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.8</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Brixton.SR5</version>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
2、application.properties中追加eureka参数定义
# eureka
# 服务注册名
spring.application.name=TEST-SERVICE
# 服务中心注册地址 即找到当前服务中心的地址,把当前的项目以TEST-SERVICE的名字注册上去
eureka.client.serviceUrl.defaultZone=http://localhost:7777/eureka
3、 主启动类,使用@EnableDiscoveryClient/服务注册和查找
@EnableDiscoveryClient //服务注册和查找
@SpringBootApplication
@MapperScan(basePackages={"cn.crk.dao"})
@ServletComponentScan
public class CourseBootApplication {
public static void main(String[] args) {
SpringApplication.run(CourseBootApplication.class, args);
}
}
4、启动应用,访问http://localhost:7777/,出现如下页面,则服务注册成功。
先启动Eureka服务中心项目,然后启动服务项目。
二、SpringCloud服务调用
调用有2中两种方式:
一种是RestTemplate模式,一种是Feign接口对象模式 。
创建一个springboot的maven工程作为调用工程。
1、RestTemplate模式(ribbon实现负载均衡)
a. pom.xml添加eureka、ribbon依赖
<!-- ribbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.3.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.3.4.RELEASE</version>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Brixton.SR5</version>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
b.application.properties中追加eureka参数定义
# eureka
# 当前的项目是否要作为一个服务注册到容器中
eureka.client.registerWithEureka=false
# 当前的服务工程是否要作为一个服务调用者
eureka.client.fetchRegistry=true
#服务中心
eureka.client.serviceUrl.defaultZone=http://localhost:7777/eureka
c.创建RestTemplate对象,追加@LoadBalanced,启用ribbon负载功能
/**
* 配置RestTemplate模式
* */
@Configuration
public class RestTemplateConfiguration {
@Bean
@LoadBalanced // 追加ribbon负载功能
public RestTemplate createRestTemplate() {
return new RestTemplate();
}
}
d.注入RestTemplate对象,利用服务名调用Restful服务
@Autowired
private RestTemplate template;
// 调用註冊Restful服务
@ResponseBody
@RequestMapping(value = "/restTemplate", method = RequestMethod.GET)
public ResponseResult loadDirections() {
// url规则: http://注册服务名/请求名
ResponseResult result = template.getForObject("http://TEST-SERVICE/direction", ResponseResult.class);
return result;
}
e. 在主启动类前,追加@EnableDiscoveryClient
@EnableDiscoveryClient //启用服务注册和查找
@SpringBootApplication
public class StudyWebBootApplication {
public static void main(String[] args) {
SpringApplication.run(StudyWebBootApplication.class, args);
}
}
f. 启动应用,测试服务接口 http://localhost:9001/study/restTemplate.do
2、Feign接口对象模式
a. 在之前的pom.xml中追加
<!-- feign调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.3.4.RELEASE</version>
</dependency>
b.同上
c. 定义远程Feign接口,追加@FeignClient标记
/**
* 配置Feign模式
* */
@FeignClient(name="TEST-SERVICE") //指定注册服务名
public interface TestRemote {
//调用註冊Restful服务請求名
@RequestMapping(value="/direction",method=RequestMethod.GET)
public ResponseResult loadDirections();
}
d.注入Feign接口对象调用远程服务
@Autowired
private TestRemote testRemote;
// 调用註冊Restful服务
@ResponseBody
@RequestMapping(value = "/feign", method = RequestMethod.GET)
public ResponseResult loadDirections2() {
//利用Feign接口对象方法调用远程服务
ResponseResult result = testRemote.loadDirections();
return result;
}
e.在主启动类前追加@EnableFeignClients和@EnableDiscoveryClient标记
//启用Feign接口模式调用服务
@EnableFeignClients
//启用服务注册和查找
@EnableDiscoveryClient
@SpringBootApplication
public class StudyWebBootApplication {
public static void main(String[] args) {
SpringApplication.run(StudyWebBootApplication.class, args);
}
}
f.启动应用,测试接口,同上