Spring cloud 学习(二)Feign
2017-08-05 16:38
465 查看
Feign:一个可以把远程服务提供方的 rest 接口变成本地方法调用
对上一个项目进行改造:
1.改造service0
Service0.java:
package service0;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@SpringBootApplication(scanBasePackages = "service0")
@EnableEurekaClient
@EnableWebMvc
public class Service0 {
public static void main(String[] args) {
SpringApplication.run(Service0.class, args);
}
}
-----------------------------------------------------------------------------------------------------------
Service0Controller.java:
package service0.controller;
import java.util.Date;
import org.apache.commons.lang.time.FastDateFormat;
import org.springframework.web.bind.annotation.*;
@RestController
public class Service0Controller {
@GetMapping("/service0/{value}")
public String service0(@PathVariable("value") String value){
return value + ":" + FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss.sss").format(new Date());
}
}
------------------------------------------------------------------------------
启动discovery,启动service0后,测试service0的调用:
2.改造service1
Service1.java:
package service1;
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.web.servlet.config.annotation.EnableWebMvc;
@SpringBootApplication(scanBasePackages = "service1")
@EnableFeignClients
@EnableDiscoveryClient
@EnableWebMvc
public class Service1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(Service1.class, args);
}
}
--------------------------------------------------------------------
Server0Client.java:
package service1.client;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@FeignClient("service0") //service0的application中的name属性一致
public interface Server0Client {
@RequestMapping(method=RequestMethod.GET,path="/service0/{value}")
public String service0(@PathVariable("value") String value);//与service0controller的方法一致
}
--------------------------------------------------------------------------
Service1Controller.java:
package service1.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import service1.client.Server0Client;
@RestController
public class Service1Controller {
@Autowired
private Server0Client server0Client;
@GetMapping("/service1/{value2}")
public String service1(@PathVariable("value2") String value2){
return server0Client.service0(value2);
}
}
-----------------------------------------------------------------------
启动discovery,启动service0,service1后,测试service1的调用:
访问service1时,又通过本地调用调用service0的接口,最后返回service0的处理结果。
对上一个项目进行改造:
1.改造service0
Service0.java:
package service0;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@SpringBootApplication(scanBasePackages = "service0")
@EnableEurekaClient
@EnableWebMvc
public class Service0 {
public static void main(String[] args) {
SpringApplication.run(Service0.class, args);
}
}
-----------------------------------------------------------------------------------------------------------
Service0Controller.java:
package service0.controller;
import java.util.Date;
import org.apache.commons.lang.time.FastDateFormat;
import org.springframework.web.bind.annotation.*;
@RestController
public class Service0Controller {
@GetMapping("/service0/{value}")
public String service0(@PathVariable("value") String value){
return value + ":" + FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss.sss").format(new Date());
}
}
------------------------------------------------------------------------------
启动discovery,启动service0后,测试service0的调用:
2.改造service1
Service1.java:
package service1;
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.web.servlet.config.annotation.EnableWebMvc;
@SpringBootApplication(scanBasePackages = "service1")
@EnableFeignClients
@EnableDiscoveryClient
@EnableWebMvc
public class Service1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(Service1.class, args);
}
}
--------------------------------------------------------------------
Server0Client.java:
package service1.client;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@FeignClient("service0") //service0的application中的name属性一致
public interface Server0Client {
@RequestMapping(method=RequestMethod.GET,path="/service0/{value}")
public String service0(@PathVariable("value") String value);//与service0controller的方法一致
}
--------------------------------------------------------------------------
Service1Controller.java:
package service1.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import service1.client.Server0Client;
@RestController
public class Service1Controller {
@Autowired
private Server0Client server0Client;
@GetMapping("/service1/{value2}")
public String service1(@PathVariable("value2") String value2){
return server0Client.service0(value2);
}
}
-----------------------------------------------------------------------
启动discovery,启动service0,service1后,测试service1的调用:
访问service1时,又通过本地调用调用service0的接口,最后返回service0的处理结果。
相关文章推荐
- SpringCloud 学习 | 第四篇: 服务消费者 feign
- SpringCloud 学习 | 第六篇: feign断路器使用(hystrix)
- springcloud学习笔记三:利用Feign编写客户消费端
- SpringCloud学习:Eureka、Feign(含示例代码)
- Spring Cloud Feign实例讲解学习
- SpringCloud 学习记录(一):服务注册与发现(eureka+feign)
- SpringCloud学习:Eureka、Ribbon和Feign
- Spring Cloud学习:02服务消费者(Ribbon&Feign)
- springcloud 的学习(三) feign
- spring-cloud-feign之spring-cloud-1.3.4(Dalston.SR3)-boot(1.5.6) 学习笔记
- spring cloud学习——17. Declarative REST Client: Feign
- 笔记:Spring Cloud Feign Hystrix 配置
- 学习微服务的统一配置管理-springCloud config+git
- Spring-Cloud 学习之旅 --- 快速开始(二)
- Spring Cloud 学习笔记
- Spring Cloud 学习笔记——入门、特征、配置
- Spring Cloud中Feign的常见问题
- spring cloud : 简化远程调用 (声明式远程调用Feign)
- SpringCloud 学习
- 微服务框架Spring Cloud介绍 Part4: 使用Eureka, Ribbon, Feign实现REST服务客户端