From a58e9b7b3e8a62408e10b056310ead4c3ceb57d3 Mon Sep 17 00:00:00 2001 From: mrbird <852252810@qq.com> Date: Tue, 21 Aug 2018 16:06:11 +0800 Subject: [PATCH] =?UTF-8?q?Spring=20Cloud=20Feign=20=E5=A3=B0=E6=98=8E?= =?UTF-8?q?=E5=BC=8F=E6=9C=8D=E5=8A=A1=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Eureka-Client/pom.xml | 60 ++++++++++++++++ .../com/example/demo/DemoApplication.java | 15 ++++ .../demo/controller/TestController.java | 32 +++++++++ .../demo/controller/UserController.java | 47 +++++++++++++ .../java/com/example/demo/domain/User.java | 55 +++++++++++++++ .../src/main/resources/application.yml | 13 ++++ .../Eureka-Service/pom.xml | 69 +++++++++++++++++++ .../com/example/demo/DemoApplication.java | 14 ++++ .../src/main/resources/application-peer1.yml | 15 ++++ .../src/main/resources/application-peer2.yml | 15 ++++ .../src/main/resources/application.yml | 9 +++ .../Feign-Consumer/pom.xml | 63 +++++++++++++++++ .../com/example/demo/DemoApplication.java | 21 ++++++ .../demo/controller/TestController.java | 42 +++++++++++ .../java/com/example/demo/domain/User.java | 53 ++++++++++++++ .../com/example/demo/service/UserService.java | 29 ++++++++ .../demo/service/UserServiceFallback.java | 41 +++++++++++ .../src/main/resources/application.yml | 22 ++++++ 18 files changed, 615 insertions(+) create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/pom.xml create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/DemoApplication.java create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/controller/TestController.java create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/controller/UserController.java create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/domain/User.java create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/resources/application.yml create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/pom.xml create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/resources/application-peer1.yml create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/resources/application-peer2.yml create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/resources/application.yml create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/pom.xml create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/DemoApplication.java create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/controller/TestController.java create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/domain/User.java create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/service/UserService.java create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/service/UserServiceFallback.java create mode 100644 33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/resources/application.yml diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/pom.xml b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/pom.xml new file mode 100644 index 0000000..8149f25 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + com.example + Eureka-Client + 0.0.1-SNAPSHOT + jar + + Eureka-Client + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.5.13.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + + org.springframework.cloud + spring-cloud-dependencies + Edgware.SR3 + pom + import + + + + + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.boot + spring-boot-starter + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/DemoApplication.java b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/DemoApplication.java new file mode 100644 index 0000000..5d549d2 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/DemoApplication.java @@ -0,0 +1,15 @@ +package com.example.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +@EnableDiscoveryClient +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) +public class DemoApplication { + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } +} diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/controller/TestController.java b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/controller/TestController.java new file mode 100644 index 0000000..c50fdd4 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/controller/TestController.java @@ -0,0 +1,32 @@ +package com.example.demo.controller; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class TestController { + + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private DiscoveryClient client; + + @GetMapping("/info") + public String info() { + @SuppressWarnings("deprecation") + ServiceInstance instance = client.getLocalServiceInstance(); + String info = "host:" + instance.getHost() + ",service_id:" + instance.getServiceId(); + log.info(info); + return info; + } + + @GetMapping("/hello") + public String hello() { + return "hello world"; + } +} diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/controller/UserController.java b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/controller/UserController.java new file mode 100644 index 0000000..64dadce --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/controller/UserController.java @@ -0,0 +1,47 @@ +package com.example.demo.controller; + +import com.example.demo.domain.User; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +@RestController +@RequestMapping("user") +public class UserController { + + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @GetMapping("/{id:\\d+}") + public User get(@PathVariable Long id) { + log.info("获取用户id为 " + id + "的信息"); + return new User(id, "mrbird", "123456"); + } + + @GetMapping + public List get() { + List list = new ArrayList<>(); + list.add(new User(1L, "mrbird", "123456")); + list.add(new User(2L, "scott", "123456")); + log.info("获取用户信息 " + list); + return list; + } + + @PostMapping + public void add(@RequestBody User user) { + log.info("新增用户成功 " + user); + } + + @PutMapping + public void update(@RequestBody User user) { + log.info("更新用户成功 " + user); + } + + @DeleteMapping("/{id:\\d+}") + public void delete(@PathVariable Long id) { + log.info("删除用户成功 " + id); + } + +} diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/domain/User.java b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/domain/User.java new file mode 100644 index 0000000..4ce63e1 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/domain/User.java @@ -0,0 +1,55 @@ +package com.example.demo.domain; + +import java.io.Serializable; + +public class User implements Serializable { + + private static final long serialVersionUID = 1339434510787399891L; + private Long id; + + private String username; + + private String password; + + public User() { + } + + public User(Long id, String username, String password) { + this.id = id; + this.username = username; + this.password = password; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public String toString() { + return "User{" + + "id=" + id + + ", username='" + username + '\'' + + ", password='" + password + '\'' + + '}'; + } +} diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/resources/application.yml b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/resources/application.yml new file mode 100644 index 0000000..8bd92b2 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/resources/application.yml @@ -0,0 +1,13 @@ +server: + port: 8082 + +spring: + application: + name: Server-Provider + +eureka: + client: + register-with-eureka: true + fetch-registry: true + serviceUrl: + defaultZone: http://mrbird:123456@peer1:8080/eureka/,http://mrbird:123456@peer2:8081/eureka/ \ No newline at end of file diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/pom.xml b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/pom.xml new file mode 100644 index 0000000..4bdff94 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/pom.xml @@ -0,0 +1,69 @@ + + + 4.0.0 + + com.example + Eureka-Service + 0.0.1-SNAPSHOT + jar + + Eureka-Service + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.5.13.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + + org.springframework.cloud + spring-cloud-dependencies + Edgware.SR3 + pom + import + + + + + + + org.springframework.cloud + spring-cloud-starter-eureka-server + + + org.springframework.boot + spring-boot-starter-security + + + + + + + nexus-aliyun + Nexus aliyun + http://maven.aliyun.com/nexus/content/groups/public + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java new file mode 100644 index 0000000..f1a6ef5 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java @@ -0,0 +1,14 @@ +package com.example.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; + + +@EnableEurekaServer +@SpringBootApplication +public class DemoApplication { + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } +} diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/resources/application-peer1.yml b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/resources/application-peer1.yml new file mode 100644 index 0000000..22742c9 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/resources/application-peer1.yml @@ -0,0 +1,15 @@ +server: + port: 8080 + +spring: + application: + name: Eureka-Server + +eureka: + instance: + hostname: peer1 + client: + serviceUrl: + defaultZone: http://mrbird:123456@peer2:8081/eureka/ + server: + enable-self-preservation: false diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/resources/application-peer2.yml b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/resources/application-peer2.yml new file mode 100644 index 0000000..960449b --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/resources/application-peer2.yml @@ -0,0 +1,15 @@ +server: + port: 8081 + +spring: + application: + name: Eureka-Server + +eureka: + instance: + hostname: peer2 + client: + serviceUrl: + defaultZone: http://mrbird:123456@peer1:8080/eureka/ + server: + enable-self-preservation: false diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/resources/application.yml b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/resources/application.yml new file mode 100644 index 0000000..09c8efe --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/resources/application.yml @@ -0,0 +1,9 @@ +security: + basic: + enabled: true + user: + name: mrbird + password: 123456 +spring: + profiles: + active: peer1 \ No newline at end of file diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/pom.xml b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/pom.xml new file mode 100644 index 0000000..4cc1245 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/pom.xml @@ -0,0 +1,63 @@ + + + 4.0.0 + + com.example + Feign-Consumer + 0.0.1-SNAPSHOT + jar + + Feign-Consumer + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.5.13.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + + org.springframework.cloud + spring-cloud-dependencies + Edgware.SR3 + pom + import + + + + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.boot + spring-boot-starter + + + org.springframework.cloud + spring-cloud-starter-feign + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/DemoApplication.java b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/DemoApplication.java new file mode 100644 index 0000000..a5074b8 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/DemoApplication.java @@ -0,0 +1,21 @@ +package com.example.demo; + +import feign.Logger; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.netflix.feign.EnableFeignClients; +import org.springframework.context.annotation.Bean; + +@EnableDiscoveryClient +@EnableFeignClients +@SpringBootApplication +public class DemoApplication { + @Bean + Logger.Level feignLoggerLevel() { + return Logger.Level.FULL; + } + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } +} diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/controller/TestController.java b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/controller/TestController.java new file mode 100644 index 0000000..c38ae45 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/controller/TestController.java @@ -0,0 +1,42 @@ +package com.example.demo.controller; + +import com.example.demo.domain.User; +import com.example.demo.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +public class TestController { + + @Autowired + private UserService userService; + + @GetMapping("user/{id}") + public User getUser(@PathVariable Long id) { + return userService.get(id); + } + + @GetMapping("user") + public List getUsers() { + return userService.get(); + } + + @PostMapping("user") + public void addUser() { + User user = new User(1L, "mrbird", "123456"); + userService.add(user); + } + + @PutMapping("user") + public void updateUser() { + User user = new User(1L, "mrbird", "123456"); + userService.update(user); + } + + @DeleteMapping("user/{id}") + public void deleteUser(@PathVariable Long id) { + userService.delete(id); + } +} diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/domain/User.java b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/domain/User.java new file mode 100644 index 0000000..acd13d4 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/domain/User.java @@ -0,0 +1,53 @@ +package com.example.demo.domain; + +import java.io.Serializable; + +public class User implements Serializable { + + private static final long serialVersionUID = 1339434510787399891L; + private Long id; + private String username; + private String password; + + public User() { + } + + public User(Long id, String username, String password) { + this.id = id; + this.username = username; + this.password = password; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public String toString() { + return "User{" + + "id=" + id + + ", username='" + username + '\'' + + ", password='" + password + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/service/UserService.java b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/service/UserService.java new file mode 100644 index 0000000..43cbcb7 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/service/UserService.java @@ -0,0 +1,29 @@ +package com.example.demo.service; + +import com.example.demo.domain.User; +import org.springframework.cloud.netflix.feign.FeignClient; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author MrBird + */ +@FeignClient(value = "Server-Provider", fallback = UserServiceFallback.class) +public interface UserService { + + @GetMapping("user/{id}") + public User get(@PathVariable("id") Long id); + + @GetMapping("user") + public List get(); + + @PostMapping("user") + public void add(@RequestBody User user); + + @PutMapping("user") + public void update(@RequestBody User user); + + @DeleteMapping("user/{id}") + public void delete(@PathVariable("id") Long id); +} diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/service/UserServiceFallback.java b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/service/UserServiceFallback.java new file mode 100644 index 0000000..46263cd --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/service/UserServiceFallback.java @@ -0,0 +1,41 @@ +package com.example.demo.service; + +import com.example.demo.domain.User; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author MrBird + */ +@Component +public class UserServiceFallback implements UserService { + private Logger log = LoggerFactory.getLogger(this.getClass()); + + @Override + public User get(Long id) { + return new User(-1L, "default", "123456"); + } + + @Override + public List get() { + return null; + } + + @Override + public void add(User user) { + log.info("test fallback"); + } + + @Override + public void update(User user) { + log.info("test fallback"); + } + + @Override + public void delete(Long id) { + log.info("test fallback"); + } +} diff --git a/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/resources/application.yml b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/resources/application.yml new file mode 100644 index 0000000..16cb1b6 --- /dev/null +++ b/33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/resources/application.yml @@ -0,0 +1,22 @@ +server: + port: 9000 + +spring: + application: + name: Server-Consumer + +eureka: + client: + serviceUrl: + defaultZone: http://mrbird:123456@peer1:8080/eureka/,http://mrbird:123456@peer2:8081/eureka/ + +feign: + hystrix: + enabled: true +logging: + level: + com: + example: + demo: + service: + UserService: debug