概述
通过RestTemplate、OpenFeign发起远程服务掉用
文章目录
- 通过RestTemplate、OpenFeign发起远程服务掉用
- 几个概念
- OpenFeign发起调用的步骤
- RestTemplate发起远程调用
上一节,介绍了Eureka集群的搭建,以及单个微服务如何向Eureka进行注册。这一节,简单介绍如何在一个服务中,调用另外一个服务(实质是发Http请求)。
几个概念
RestTemplate是Spring提供的对Http客户端的封装类,能够发起Http调用并解析Http响应,比Httpclient使用起来更方便。
Feign基于RestTemplate进行了更进一步的包装,并且实现了声明式的接口调用——内部实现是,读取接口中的信息,自动组装请求的url和参数,发起http调用,解析http响应,然后将调用结果返回给调用者。
OpenFeign则是将Feign实现的功能,纳入SpringMVC注解的管理范畴,能够和SpringBoot进行无缝集成。
OpenFeign发起调用的步骤
-
新建一个SpringWeb项目(带Eureka),作为服务提供方,提供一个http接口,如sayHello()。
application.name叫
test-provider
。
@RestController
public class MainController {
@Value("${server.port}")
String port;
@GetMapping("/sayHello")
public String sayHello() {
return "Hi, port="+port;
}
}
启动该服务作为服务提供方。最好是在两个不同的端口,如9001和9002上分别启动,以便于观察服务消费方,OpenFeign(默认集成了Ribbon)提供的负载均衡功能。
-
服务消费方(也是带Eureka的Web项目)的pom.xml中引入
openfeign
依赖:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.2.RELEASE</version> </dependency>
-
在服务消费方的启动类@SpringBootApplication上加注解
@EnableFeignClients
。 -
服务消费方,写好接口:
//ITestApi.java public interface ITestApi { @GetMapping("/sayHello") public String sayHello(); } //TestApi.java //指定服务提供方的application-name @FeignClient(name = "test-provider") public interface TestApi extends ITestApi { }
-
消费方发起调用,比如在Controller里面:
@Autowired TestApi testApi; @GetMapping("/getByFeign") public String getByFeign() { return testApi.sayHello(); }
然后,通过浏览器访问服务消费方提供的Http接口:
http://localhost:8081/getByFeign
在页面上得到服务提供方返回的信息:
Hi, port=9001
Hi, port=9002
交替出现9001和9002,说明OpenFeign集成的负载均衡策略起作用了。
RestTemplate发起远程调用
在服务消费方@SpringBootApplication
服务启动类里面,注册一个单例RestTemplate:
@Bean
@LoadBalanced// 开启负载均衡
RestTemplate restTemplate() {
return new RestTemplate();
}
在Controller里面直接通过restTemplate向服务提供方发起调用。
@Autowired
RestTemplate restTemplate;
@GetMapping("/getRest")
public String getRestTemplate() {
String url = "http://test-provider/sayHello";
String res = restTemplate.getForObject(url, String.class);
return res;
}
或者注入LoadBalancerClient lb
,通过lb.choose(service-name)
完成负载均衡。
@Autowired
LoadBalancerClient lb;
@GetMapping("/getLB")
public Object getLB() {
//ribbon完成客户端的负载均衡,过滤掉了down掉的节点
ServiceInstance ins = lb.choose("test-provider");
String url = "http://"+ins.getHost()+":"+ins.getPort()+"/sayHello";
System.out.println("url:"+url);
RestTemplate restTemplate = new RestTemplate();
return restTemplate.getForObject(url, String.class);
}
最后
以上就是俊秀金毛为你收集整理的SpringCloud-02:通过RestTemplate、OpenFeign发起远程服务掉用的全部内容,希望文章能够帮你解决SpringCloud-02:通过RestTemplate、OpenFeign发起远程服务掉用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复