SpringCloud之学习笔记(Feign+consul)
Posted 皓洲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud之学习笔记(Feign+consul)相关的知识,希望对你有一定的参考价值。
SpringCloud之学习笔记
Spring Cloud 为开发者提供了快速构建分布式系统中一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。分布式系统的协调导致了样板模式,使用 Spring Cloud 开发人员可以快速建立实现这些模式的服务和应用程序。它们将适用于任何分布式环境,包括开发人员自己的笔记本电脑、裸机数据中心和托管平台(如 Cloud Foundry)。
SpringCloud中文文档:https://www.springcloud.cc/
Feign+consul
Feign是一个声明式的Web服务客户端,能够在类接口上添加注释,成为一个REST API 客户端。简单来说就是用来调用其他服务的。
consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。
pom依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><!-- consul 服务发现 -->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency><!-- consul 服务调用 -->
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency><!--springboot监控系统健康情况,可以预编译配置-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency><!--lombok-->
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
要注意Springboot和SpringCloud版本对应!!!
配置文件application.yml
客户端:
server:
port: 8080
spring:
application:
name: feign-first-server
cloud:
## 服务注册中心配置
consul:
host: 192.168.51.209 #consul的ip地址
port: 8500 #consul开启的端口号
enabled: true #开启注册
discovery:
register: true
enabled: true #开启被发现
serviceName: ${spring.application.name}
prefer-ip-address: true
instanceId: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
port: ${server.port}
healthCheckInterval: 10s
feign:
hystrix:
enabled: true # 开启hystrix熔断
client:
config:
default:
connectTimeout: 3000
readTimeout: 32000
服务端:和客户端只有端口号和服务名不同
server:
port: 8082
spring:
application:
name: feign-second-server
cloud:
## 服务注册中心配置
consul:
host: 192.168.51.209 #consul的ip地址
port: 8500 #consul开启的端口号
enabled: true #开启注册
discovery:
register: true
enabled: true #开启被发现
serviceName: ${spring.application.name}
prefer-ip-address: true
instanceId: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
port: ${server.port}
healthCheckInterval: 10s
feign:
hystrix:
enabled: true # 开启hystrix熔断
client:
config:
default:
connectTimeout: 3000
readTimeout: 32000
启动类注解:
@SpringBootApplication
@EnableFeignClients//启动Feign客户端
@EnableDiscoveryClient//启动consul
public class FeignDemoApplication {
public static void main(String[] args) {
SpringApplication.run(FeignDemoApplication.class, args);
}
}
涉及到的Dto
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FeignRequestDto {
Integer id;
String userName;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FeignResponseDto {
Integer id;
String message;
}
接口
@FeignClient(name = "feign-second-server", fallback = FeignInterface.DefaultFallback.class)
public interface FeignInterface {
/**
* 处理
*
* @param requestDTO 请求
* @return 返回结果
*/
@RequestMapping(value = "/feign2", method = {RequestMethod.POST})
@ResponseBody
FeignResponseDto processRequest(@RequestBody FeignRequestDto requestDTO);
//重写一个默认备份
@Component
class DefaultFallback implements FeignInterface {
@Override
public FeignResponseDto processRequest(FeignRequestDto requestDTO) {
FeignResponseDto responseDTO = new FeignResponseDto(requestDTO.getId(), "失败");
return responseDTO;
}
}
}
客户端wrapper层
@Controller
@Slf4j
public class FeignWrapper {
@Autowired
private FeignInterface feignInterface;
/** 处理
* @param requestDTO 请求
* @return 返回结果
*/
@RequestMapping(value = "/feign", method = {RequestMethod.POST})
@ResponseBody
public FeignResponseDto processRequest(@RequestBody FeignRequestDto requestDTO) {
log.info("我是first服务的开始请求second服务:{}", requestDTO.getUserName());
return feignInterface.processRequest(requestDTO);
}
}
服务端Service实现类
@Service
public class FeignWrapperImpl {
/**
* 请求处理
*
* @param requestDTO
* @return
*/
public FeignResponseDto doProcessRequest(FeignRequestDto requestDTO) {
FeignResponseDto responseDTO = new FeignResponseDto();
responseDTO.setMessage("用户名为:" + requestDTO.getUserName());
responseDTO.setId(1000 + requestDTO.getId());
// 返回
return responseDTO;
}
}
启动consul
下载consul:https://www.consul.io/downloads
启动consul:
consul agent -dev -client 192.168.51.209 -ui
流程图
结果展示
以上是关于SpringCloud之学习笔记(Feign+consul)的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud学习系列之二 ----- 服务消费者(Feign)和负载均衡(Ribbon)
Java 微服务之 SpringCloud快速入门day02 Feign