8、服务发现&服务消费者Feign

简介: Feign :spring cloud feign 是一个使用起来更加方便的 HTTP 客戶端。 在使用ribbon时,通常会使用RestTemplate实现对http请求的封装,形成了模板化的调用方法。

spring cloudNetflix中提供了两个组件实现软负载均衡调用,分别是RibbonFeign。上一篇和大家一起学习了Ribbon


Ribbon :Spring Cloud Ribbon是基于HTTPTCP的客户端负载工具,它是基于Netflix Ribbon实现的它可以在客户端配置 ribbonServerList(服务端列表),然后轮询请求以实现均衡负载


Feign :spring cloud feign 是一个使用起来更加方便的 HTTP 客戶端在使用ribbon时,通常会使用RestTemplate实现对http请求的封装,形成了模板化的调用方法。spring cloud feign在此基础上做了进一步的封装,Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,完全感知不到这是远程方法,更感知不到这是个HTTP请求。

 

1、 新建项目sc-eureka-client-consumer-feign,对应的pom.xml文件如下


<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">
<modelVersion>4.0.0</modelVersion>
<groupId>spring-cloud</groupId>
<artifactId>sc-eureka-client-consumer-feign</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>sc-eureka-client-consumer-feign</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- 说明是一个 eureka client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-feign</artifactId>
    <version>1.4.5.RELEASE</version>
   </dependency> -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
</project>


备注:spring cloud 2.xspring-cloud-starter-feign已经被标识为过期,推荐使用spring-cloud-starter-openfeign


微信图片_20220501133050.png


2、 新建spring boot启动类ConsumerFeignApplication.java


package sc.consumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ConsumerFeignApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerFeignApplication.class, args);
}
}


3、 创建配置文件bootstrap.ymlapplication.yml,对应的内容如下


bootstrap.yml


server:
  port: 5800


application.yml


spring:
  application:
    name: sc-eureka-client-consumer-feign
eureka:
  client:
    registerWithEureka: true #是否将自己注册到Eureka服务中,默认为true
    fetchRegistry: true #是否从Eureka中获取注册信息,默认为true
    serviceUrl:
      defaultZone: http://localhost:5001/eureka/


4、 编写feign客户端


package sc.consumer.service;
import java.util.Map;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import sc.consumer.model.User;
@FeignClient(value="sc-eureka-client-provider")
public interface UserService {
@GetMapping("/user/getUser/{id}")
Map<String, Object> getUser(@PathVariable(value ="id") Long id);
@RequestMapping("/user/listUser")
Map<String, Object> listUser();
@PostMapping("/user/addUser")
Map<String, Object> addUser(@RequestBody User user);
@PutMapping("/user/updateUser")
Map<String, Object> updateUser(@RequestBody User user);
@DeleteMapping("/user/deleteUser/{id}")
Map<String, Object> deleteUser(@PathVariable(value ="id") Long id);
}


5、 分别启动注册中心项目sc-eureka-server和服务提供者sc-eureka-client-provider



6、 启动项目sc-eureka-client-consumer-feign,并验证是否启动成功


方法一


微信图片_20220501133334.png


方法二


微信图片_20220501133337.png


7、 使用postman验证


查询:


http://127.0.0.1:5800/feign/user/getUser/4


微信图片_20220501133639.png


列表:


http://127.0.0.1:5800/feign/user/listUser


微信图片_20220501133643.png


添加:


http://127.0.0.1:5800/feign/user/addUser


微信图片_20220501133646.png


更新:


http://127.0.0.1:5800/feign/user/updateUser


微信图片_20220501133649.png


删除:


http://127.0.0.1:5800/feign/user/deleteUser/6


微信图片_20220501133651.png


备注:


sc-eureka-client-provider项目的UserController.java 需要修正


微信图片_20220501133654.png


https://gitee.com/hjj520/spring-cloud-2.x/tree/master/sc-eureka-client-consumer-feign





相关文章
|
15天前
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
负载均衡 Dubbo 应用服务中间件
不满足于RPC,详解Dubbo的服务调用链路(1)
不满足于RPC,详解Dubbo的服务调用链路
288 0
|
XML 编解码 JSON
不满足于RPC,详解Dubbo的服务调用链路(2)
不满足于RPC,详解Dubbo的服务调用链路
206 0
|
Java Linux 微服务
Feign的远程调用--微服务重试的坑
Feign的远程调用--微服务重试的坑
316 0
|
负载均衡 Java Maven
Eureka消费者使用rest方式调用 依赖ribbon负载均衡器
上两篇博客已经描述了搭建Eureka注册中心和把服务提供者注册到Eureka
|
负载均衡 Java Nacos
Springcloud服务调用Feign组件以及负载均衡
Springcloud服务调用Feign组件以及负载均衡
|
Java API 网络架构
微服务实战04-feign服务调用
微服务实战04-feign服务调用
141 0
|
存储 JavaScript 小程序
SpringCloud 三种服务调用方式,你学会了吗?
SpringCloud 三种服务调用方式,你学会了吗?
|
设计模式 Dubbo Java
dubbo生产者暴露服务流程
在这个过程中,url是我们需要进行关注的,此时我们可以看到基本上都是以url为主题进行组装操作。将所有需要放入的输入进行放入,同时最终会以观察者模式,实现配置的实时更新。低版本的dubbo则是以实现InitializingBean,重写AfterPropertiesSet方法。之所以改成基于ApplicationEvent,是因为可以进行更新,这是ApplicationEvent的优势。 同时通过对bubbo的学习,可以看到Netty的使用。
67 0
dubbo生产者暴露服务流程
|
消息中间件 Dubbo Java
Dubbo 服务提供方|学习笔记
快速学习 Dubbo 服务提供方
80 0
Dubbo 服务提供方|学习笔记