提交 61ec0acf 编写于 作者: Lcry's avatar Lcry 🖥

P44-P46:完成服务调用OpenFeign、更新ReadMe说明

上级 529ca84a
......@@ -117,3 +117,5 @@ cloud-consumer-consul-order80/target/
cloud-consumer-consul-order80/src/test/
cloud-provider-consul-payment8006/target/
cloud-provider-consul-payment8006/src/test/
cloud-consumer-feign-order80/target/
cloud-consumer-feign-order80/src/test/
# SpringCloud2020
#### Description
2020-SpringCloud学习,技术选型:
SpringCloud:Hoxton.SR1
SpringBoot:2.2.2RELEASE
SpringCloud Alibaba:2.1.0.RELEASE
Java:8
Maven:3.5及以上
MySQL:5.7及以上
#### Software Architecture
Software architecture description
#### Installation
1. xxxx
2. xxxx
3. xxxx
#### Instructions
1. xxxx
2. xxxx
3. xxxx
#### Contribution
1. Fork the repository
2. Create Feat_xxx branch
3. Commit your code
4. Create Pull Request
#### Gitee Feature
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
4. The most valuable open source project [GVP](https://gitee.com/gvp)
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
# SpringCloud2020
#### 介绍
2020-SpringCloud学习,技术选型:
SpringCloud:Hoxton.SR1
SpringBoot:2.2.2RELEASE
SpringCloud Alibaba:2.1.0.RELEASE
Java:8
Maven:3.5及以上
MySQL:5.7及以上
# SpringCloud2020学习笔记
#### 软件架构
软件架构说明
#### 技术选型
SpringCloud:Hoxton.SR1
SpringBoot:2.2.2RELEASE
#### 安装教程
SpringCloud Alibaba:2.1.0.RELEASE
1. xxxx
2. xxxx
3. xxxx
Java:8
#### 使用说明
Maven:3.5及以上
1. xxxx
2. xxxx
3. xxxx
MySQL:5.7及以上
#### 参与贡献
#### 项目结构
| 项目名 | 用途 | 所用技术 |
| --------------------------------- | :--------------------------------- | ----------------------------------------------- |
| cloud-api-commons | 公共代码部分(返回结果集、实体等) | \ |
| cloud-consumer-consul-order80 | 消费方通过Consul调用服务方 | 注册中心(Consul)、远程调用(RestTemplate) |
| cloud-consumer-feign-order80 | 消费方通过feign远程调用服务方 | 服务调用(openfeign)、注册中心(EurekaClient) |
| cloud-consumer-order80 | 消费方通过Eureka调用服务方等示例 | 注册中心(Eureka)、远程调用(RestTemplate) |
| cloud-consumer-zk-order80 | 消费方通过Zk调用服务方 | 注册中心(Zk)、远程调用(RestTemplate) |
| cloud-eureka-server7001 | Eureka服务端1 | 注册中心(EurekaServer) |
| cloud-eureka-server7002 | Eureka服务端2 | 注册中心(EurekaServer) |
| cloud-provider-consul-payment8006 | 服务方通过Consul注册服务 | 注册中心(Consul) |
| cloud-provider-payment8001 | 服务方通过Eureka注册服务 | 注册中心(Euraka) |
| cloud-provider-payment8002 | 服务方通过Eureka注册服务 | 注册中心(Euraka) |
| cloud-provider-zk-payment8004 | 服务方通过Zk注册服务 | 注册中心(Zk) |
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 码云特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
持续更新中....
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>2020SpringCloud</artifactId>
<groupId>com.lcry</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<!-- 服务消费方使用feign远程调用服务-->
<artifactId>cloud-consumer-feign-order80</artifactId>
<dependencies>
<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- eureka client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--引入自己定义的api调用包,可以使用Payment支付Entity-->
<dependency>
<groupId>com.lcry</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<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>
</project>
\ No newline at end of file
package com.lcry.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* FeignOrderMain80
*
* @author lcry
* @date 2020/03/14 21:25
*/
@SpringBootApplication
//启用Feign
@EnableFeignClients
public class FeignOrderMain80 {
public static void main(String[] args) {
SpringApplication.run(FeignOrderMain80.class, args);
}
}
package com.lcry.springcloud.config;
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* FeignConfig
*
* @author lcry
* @date 2020/03/14 22:04
* Feign日志控制
*/
@Configuration
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel() {
/**
* 日志级别:
* NONE :不记录任何日志(默认)
* BASIC:仅记录请求方法、URL、响应状态代码以及执行时间
* HEADERS:记录BASIC级别的基础上,记录请求和响应的header
* FULL:记录请求和响应的header,body和元数据
*/
return Logger.Level.FULL;
}
}
package com.lcry.springcloud.controller;
import com.lcry.springcloud.entities.CommonResult;
import com.lcry.springcloud.entities.Payment;
import com.lcry.springcloud.service.PaymentFeignService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* OrderFeignController
*
* @author lcry
* @date 2020/03/14 21:29
*/
@RestController
@Slf4j
public class OrderFeignController {
@Resource
private PaymentFeignService paymentFeignService;
@GetMapping(value = "/consumer/payment/get/{id}")
public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) {
return paymentFeignService.getPaymentById(id);
}
@GetMapping(value = "/consumer/payment/feign/timeout")
public String paymentFeignTimeout() {
//OpenFeign-Ribbon:客户端一般默认等待1秒钟
return paymentFeignService.paymentFeignTimeout();
}
}
package com.lcry.springcloud.service;
import com.lcry.springcloud.entities.CommonResult;
import com.lcry.springcloud.entities.Payment;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
/**
* PaymentFeignService
*
* @author lcry
* @date 2020/03/14 21:28
*/
@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE") //需要调用的目标微服务应用名称
public interface PaymentFeignService {
//Feign接口中的方法要与目标服务中的Controller中的方法完全一致,可以直接copy
@GetMapping(value = "/payment/get/{id}")
public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);
@GetMapping(value = "/payment/feign/timeout")
public String paymentFeignTimeout();
}
server:
port: 80
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://localhost:7001/eureka #单机版
#defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
#OpenFeign的超时控制配置:默认只等待1秒,超时则报错
#设置Feign客户端超时时间(OpenFeign默认支持Ribbon)
ribbon:
#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
ReadTimeout: 5000
#指的是建立连接后从服务器读取到可用资源所用的时间
connectTimeout: 5000
#开启Feign的日志客户端
logging:
level:
#Feign日志以什么级别监听哪个接口
com.lcry.springcloud.service.PaymentFeignService: debug
\ No newline at end of file
......@@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* PaymentController
......@@ -56,8 +57,6 @@ public class PaymentController {
}
@GetMapping(value = "/payment/discovery")
public Object discovery() {
//查询Eureka上面注册了几个服务
......@@ -78,10 +77,25 @@ public class PaymentController {
/**
* 自己编写轮训算法测试
*
* @return 请求到的服务端口号
* @return 请求到的服务端口号
*/
@GetMapping(value = "/payment/lb")
public String getPaymentLB() {
return serverPort;
}
/**
* 测试服务超时feign调用默认1s返回错误
* OpenFeign超时控制演示,OpenFeign默认等待1秒钟,超过则报错
*/
@GetMapping(value = "/payment/feign/timeout")
public String getPaymentTimeout() {
//暂停3秒钟线程
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
return serverPort;
}
}
......@@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* PaymentController
......@@ -82,4 +83,20 @@ public class PaymentController {
public String getPaymentLB() {
return serverPort;
}
/**
* 测试服务超时feign调用默认1s返回错误
* OpenFeign超时控制演示,OpenFeign默认等待1秒钟,超过则报错
*/
@GetMapping(value = "/payment/feign/timeout")
public String getPaymentTimeout() {
//暂停3秒钟线程
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
return serverPort;
}
}
......@@ -18,6 +18,7 @@
<module>cloud-consumer-zk-order80</module>
<module>cloud-provider-consul-payment8006</module>
<module>cloud-consumer-consul-order80</module>
<module>cloud-consumer-feign-order80</module>
</modules>
<packaging>pom</packaging>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册