声明式调用---Feign

简介: Feign:Feign是一种声明式、模板化的HTTP客户端。用我的理解来说,Feign的功能类似dubbo暴露服务,但是与dubbo稍有不同的是Feign是HTTP REST接口的形式暴露的。

Feign:Feign是一种声明式、模板化的HTTP客户端。

用我的理解来说,Feign的功能类似dubbo暴露服务,但是与dubbo稍有不同的是Feign是HTTP REST接口的形式暴露的。

这一篇还是要利用到上一篇中的service(8762),service(8763)两个服务,先启动这两个服务。

新建项目,service-feign(8765),pom加入feign依赖,完整pom代码如下:

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.dalaoyang</groupId>
    <artifactId>springcloud_feign</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springcloud_feign</name>
    <description>springcloud_feign</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Edgware.SR1</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

在启动类加入@EnableFeignClients注解,如果没有加入basePackages制定扫描包得话,默认会去找项目会扫描到的所有@FeignClient。启动类代码如下:

package com.dalaoyang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;


@SpringBootApplication
@EnableEurekaClient
//@EnableFeignClients(basePackages = "com.dalaoyang.interfaces")
@EnableFeignClients
public class SpringcloudFeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudFeignApplication.class, args);
    }
}

创建Feign暴露接口,接口上加入@FeignClient(value="service",fallback = FeignFallbackService.class)
注解。
service为要远程调用服务的名字,即你要调用服务的spring.application.name
fallback为远程调用失败后回调的方法。代码如下:

package com.dalaoyang.interfaces;

import com.dalaoyang.back.FeignFallbackService;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @author dalaoyang
 * @Description
 * @project springcloud_learn
 * @package com.dalaoyang.interfaces
 * @email yangyang@dalaoyang.cn
 * @date 2018/4/20
 */
@FeignClient(value="service",fallback = FeignFallbackService.class)
//这里是要远程调用的服务的名称,即你要调用服务的spring.application.name
//fallback是远程调用失败回调的方法
public interface FeignInterface {
    @GetMapping("/")
    String IndexInfo();
}

远程调用失败回调类FeignFallbackService,要实现对应的FeignClient实现对应的方法:

package com.dalaoyang.back;

import com.dalaoyang.interfaces.FeignInterface;
import org.springframework.stereotype.Service;

/**
 * @author dalaoyang
 * @Description
 * @project springcloud_learn
 * @package com.dalaoyang.back
 * @email yangyang@dalaoyang.cn
 * @date 2018/4/20
 */
@Service
public class FeignFallbackService implements FeignInterface {
    @Override
    public String IndexInfo(){
        return "远程调用失败!";
    };
}

最后看一下配置文件,需要注意的是feign.hystrix.enabled,如果配置远程调用回调的话需要声明一下Feign的 hystrix支持,不然页面还是会显示错误。

##端口号
server.port=8765

##服务名称
spring.application.name=service_feign

##注册中心地址
eureka.client.service-url.defaultZone=http://eureka.dalaoyang.cn/eureka/


##声明Feign的 hystrix支持
feign.hystrix.enabled=true

启动service-feign(8765),先去看一眼http://eureka.dalaoyang.cn

image

可以看到服务注册成功,然后访问http://localhost:8765/,可以看到页面和使用ribbon的时候一样交替显示。

image
image

控制台

image

然后我们关闭service(8762),service(8763)两个服务,再次访问,可以看到

image

源码下载 :大老杨码云

个人网站:https://dalaoyang.cn

目录
相关文章
|
人工智能 编解码 安全
如何使用Sora?Sora小白教程一文通
如何使用Sora?Sora小白教程一文通。本文深入探讨了OpenAI于2024年发布的Sora——一款创新的文生视频大模型,详细介绍了其功能、技术原理、精准度、安全性以及对未来影响的全面分析
|
XML JSON 安全
Gob实践全攻略,数据传输利器
Gob实践全攻略,数据传输利器
326 0
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
探索人工智能的深度学习与自然语言处理前沿
【10月更文挑战第10天】探索人工智能的深度学习与自然语言处理前沿
|
11月前
|
缓存 算法 测试技术
性能测试的结果如何才算准确?
性能测试的结果如何才算准确?
327 57
|
10月前
|
存储 人工智能 搜索推荐
《知识表示:开启人工智能学习与推理的密钥》
知识表示是人工智能的核心问题,决定了知识如何被计算机理解和处理。它是AI学习与推理的基础,尤其在专家系统、智能搜索和机器人等领域至关重要。通过语义网络、框架表示和谓词逻辑等方法,知识可以结构化存储,支持高效处理。然而,知识的复杂性、更新和共享仍是挑战。未来,知识表示将随着AI技术进步不断创新,推动更多应用场景的发展。
232 14
|
11月前
|
传感器 监控 物联网
物联网与虚拟现实:未来科技的发展趋势与应用探索####
本文探讨了物联网(IoT)与虚拟现实(VR)这两大新兴技术的最新发展趋势及其广泛的应用场景。通过分析这些技术的核心原理、当前发展现状以及未来的潜在影响,揭示了它们如何独立演进又相互融合,共同推动社会进步。本文旨在为读者提供一个全面的了解,以把握未来科技的脉络,迎接技术革新带来的挑战与机遇。 ####
|
11月前
|
存储 开发工具 git
git工具使用教程全讲解
本文介绍了版本控制的概念及其重要性,详细对比了多种版本控制工具,如VSS、CVS、SVN和Git,重点讲解了Git的基本使用方法、工作原理及与SVN的区别。此外,文章还介绍了GitHub、GitLab和Gitee等流行的代码托管平台,以及如何在这些平台上注册账号、创建和管理仓库。最后,文章还提供了如何在IntelliJ IDEA中配置和使用Git的具体步骤。
368 1
|
12月前
|
安全 网络协议 数据安全/隐私保护
访问控制(ACL)原理详解
访问控制(ACL)原理详解
616 0
访问控制(ACL)原理详解
ly~
|
12月前
|
存储 SQL NoSQL
数据库介绍
数据库是组织、存储和管理数据的仓库,分为关系型(RDBMS)和非关系型(NoSQL)。RDBMS 如 MySQL、Oracle 和 SQL Server 通过表间关系存储结构化数据;NoSQL 包括 MongoDB、Redis 和 Neo4j,处理非结构化数据。数据库功能组件有数据定义语言(DDL)、数据操作语言(DML)和数据库管理系统(DBMS)。应用场景涵盖企业资源规划(ERP)、电子商务和大数据分析,支持自动化管理、数据分析及决策支持。
ly~
215 3
|
12月前
|
监控 数据可视化 数据挖掘
一文带你了解如何通过数据可视化与仪表盘提升工作效率?
在数据驱动的时代,快速、准确地从海量信息中提取有用部分成为核心挑战。**数据可视化**和**仪表盘**是解决这一问题的有效工具。它们将复杂数据转化为直观图表,帮助用户快速掌握关键指标、跟踪进展,并做出更好决策。本文将介绍数据可视化的常见方法、仪表盘的作用,并通过经典案例展示这些工具的实际应用。
249 0