【SpringBoot深入浅出系列】SpringBoot集成Eureka及Feign

2023-11-13


前言

本文通过 springboot 创建两个项目:provider、consumer,并注册至 Eureka 注册中心,通过Feign实现服务间调用。

一、Eureka 是什么?

Eureka 是 Netflix 开发的服务发现框架,本身是一个基于 REST 的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。
Eureka 包含两个组件:Eureka Server 和 Eureka Client。
Eureka Server 提供服务注册服务,各个节点启动后,会在 Eureka Server 中进行注册,这样 EurekaServer 中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client 是一个java客户端,用于简化与 Eureka Server 的交互,客户端同时也就是一个内置的、使用轮询(round-robin) 负载算法的负载均衡器。
不过 Eureka 的 GitHub Wiki 显示 2.0 版本的开源工作不再继续了:https://github.com/Netflix/eureka/wiki
在这里插入图片描述
大家可以考虑使用 Nacos 替代。见:SpringBoot 集成 Nacos 及 Feign,就是这么简单

二、Feign 是什么?

Feign 是一个声明式 Web 服务客户端。它使编写 Web 服务客户端变得更加容易。只需要创建一个接口并添加注解就可以进行微服务的调用。

三、集成步骤

1.创建 Eureka 服务注册中心

创建 SpringBoot 项目的方法见:[使用Idea创建 SpringBoot 项目]

(1).添加依赖

pom.xml 文件中添加以下依赖:

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

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

注意:SpringBoot 和 SpringCloud 版本要对应,见:SpringBoot 、SpringCloud 版本选择

(2).添加配置

application.yml 文件中添加以下配置:

server:
  port: 8080 #服务注册中心端口
eureka:
  instance:
    hostname: 127.0.0.1 #服务注册中心IP地址
  client:
    registerWithEureka: false #是否向服务注册中心注册自己
    fetchRegistry: false #是否检索服务
    serviceUrl: #服务注册中心链接,指定服务注册中心的位置
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

(3).启动类添加注解

启动类添加注解 @EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

}

(4).启动服务

运行服务后,浏览器输入:http://localhost:8080/
在这里插入图片描述

2.创建 SpringBoot 项目 provider

创建 SpringBoot 项目的方法见:使用Idea创建 SpringBoot 项目

(1).添加依赖

pom.xml 文件中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
        <version>2.1.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.69</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.22</version>
    </dependency>
</dependencies>

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

(2).添加配置

application.yml 文件中添加以下配置:

server:
  port: 8081  #服务端口
eureka:
  client:
    serviceUrl: #注册中心注册地址
      defaultZone: http://127.0.0.1:8080/eureka/
spring:
  application:
    name: service-provider #服务名称

(3).启动类添加注解

项目启动类添加注解:@EnableEurekaClient

@SpringBootApplication
@EnableEurekaClient
public class ProviderApplication {

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

}

(4).新建订单实体类

@Data
public class Order {
    private String orderId; // 订单 id

    private Long userId; // 用户 id

    private Date createDate; // 创建时间

    private Date updateDate; // 修改时间

    private String orderDetails; // 订单详情
}

(5).新建订单服务接口类

package com.chaoyue.provider.service;

import com.alibaba.fastjson.JSONObject;

public interface OrderService {
    /** 获取订单信息
     *
     * @return
     */
    JSONObject getInfos();
}

(6).新建订单服务实现类

package com.chaoyue.provider.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.chaoyue.provider.entity.Order;
import com.chaoyue.provider.service.OrderService;
import org.springframework.stereotype.Service;

import java.util.Date;

@Service
public class OrderSeviceImpl implements OrderService {

    /** 获取订单信息
     *
     * @return
     */
    @Override
    public JSONObject getInfos() {
        Order order = new Order();
        order.setOrderId("1");
        order.setUserId(1L);
        order.setCreateDate(new Date());
        order.setUpdateDate(new Date());
        order.setOrderDetails("订单详情");
        return JSONObject.parseObject(JSON.toJSONString(order));
    }
}

(7).新建订单控制类

package com.chaoyue.provider.controller;

import com.alibaba.fastjson.JSONObject;
import com.chaoyue.provider.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/order")
public class OrderController {

    @Autowired
    private OrderService orderService;

    /** 获取订单信息
     *
     * @return
     */
    @RequestMapping("/getInfos")
    public JSONObject getInfos() {
        return orderService.getInfos();
    }
}

(8).启动服务

启动服务,可在 Eureka 注册中心看到已注册的服务
在这里插入图片描述

3.创建 SpringBoot 项目 consumer

创建SpringBoot 项目的方法见:使用Idea创建 SpringBoot 项目

(1).添加依赖

pom.xml 文件中添加以下依赖:

org.springframework.cloud spring-cloud-starter-netflix-eureka-server org.springframework.cloud spring-cloud-starter-openfeign 2.1.3.RELEASE com.alibaba fastjson 1.2.69 org.projectlombok lombok 1.18.22 org.springframework.cloud spring-cloud-dependencies 2021.0.0 pom import

(2).添加配置

application.yml 文件中添加以下配置:

server:
  port: 8082  #服务端口
eureka:
  client:
    serviceUrl: #注册中心注册地址
      defaultZone: http://127.0.0.1:8080/eureka/
spring:
  application:
    name: service-consumer #服务名称


(3).启动类添加注解

项目启动类添加注解:@EnableEurekaClient、@EnableFeignClients

package com.chaoyue.comsumer;

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(basePackages = "com.chaoyue.comsumer.feignClient")
public class ComsumerApplication {

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

}

(4).新建Feign接口

新建 OrderFeignClient 接口方法类,用来调用 provider 中的接口

package com.chaoyue.comsumer.feignClient;

import com.alibaba.fastjson.JSONObject;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient(name = "service-provider")
public interface OrderFeignClient {

    /** 获取订单信息
     *
     * @return
     */
    @RequestMapping(value = "/api/order/getInfos", method = RequestMethod.GET)
    JSONObject getInfos();
}

(5).新建订单控制类

package com.chaoyue.comsumer.controller;

import com.alibaba.fastjson.JSONObject;
import com.chaoyue.comsumer.feignClient.OrderFeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@RequestMapping("/api/order")
public class OrderController {

    @Resource
    private OrderFeignClient orderFeignClient;

    @RequestMapping("/getInfos")
    public JSONObject getInfos() {
        return orderFeignClient.getInfos();
    }
}

(6).启动服务

启动服务,可在 Eureka 注册中心看到已注册的服务
在这里插入图片描述

四、测试

浏览器输入链接:http://localhost:8082/api/order/getInfos
在这里插入图片描述


总结

以上就是今天要讲的内容,如果大家要了解更多的相关内容,请关注本博客的后续博文。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【SpringBoot深入浅出系列】SpringBoot集成Eureka及Feign 的相关文章

随机推荐

  • Jupyterlab使用plotly图片不显示解决方法

    问题 anaconda装好了plotly库 进入lab画图 发现不管怎样都显示空白 无法显示图片 解决方法 这是因为没有安装渲染支持的插件 在命令行输入 首先需要安装nodejs12 0 0以上版本 conda install nodejs
  • Pod 启动时命令和参数 与 dockerfile镜像区别

    主要是记录问题 如下文档 为容器设置启动时要执行的命令和参数 KubernetesDockerfile 中的 CMD 与 ENTRYPOINT sparkdev 博客园 K8s Pod Command 与容器镜像 Cmd 启动优先级详解 腾
  • Intellj IDE出现 java.lang.NoClassDefFoundError:

    在Intellj Idea中 主程序依赖了一个库modules 在模块中有一个dependence选项卡 把相关的依赖库选项的provided改为compile即可
  • python获取上一层文件夹路径

    https www cnblogs com yajing zh p 6807968 html
  • 零基础程序员自学编程的6种方法,你知道吗?

    随着互联网日趋迅猛 编程已经在我们生活当中无处不在了 众所周知 程序员的工资都很不错 于是越来越多的人 都想加入到编程的行业中来 那么如何加入到程序员的行业当中 PHP从入门到放弃 C语言从入门到放弃 Java从入门到放弃 Python从入
  • flutter创建项目指定语言

    每次新建Flutter项目都会去用命令来创建 因为不熟悉android的kottlin语言 每次都会抗拒一下 所以每次创建项目我都会选择去选用我熟悉的Java跟OC语言 直接上方法 注意 现在flutter创建的项目默认是swift跟kot
  • 如何实现在一个 Socket 应用程序中同时支持 IPv4 和 IPv6

    如何实现在一个 Socket 应用程序中同时支持 IPv4 和 IPv6 如何巧妙地设计代码结构 陈 鲁 软件工程师 IBM 孙 妍 软件工程师 IBM 简介 当今的网络主流是 IPv4 网络 但随着 IP 地址的日益短缺 IPv6 网络开
  • JSP页面获取cookie内容

    当使用jsp技术时会用到cookie保存一些信息 在后端逻辑代码设置cookie Cookie name new Cookie uname na Cookie pwd new Cookie upwd pw 设置最大存活时间180s name
  • vue之路由配置中的meta

    仅对以前所学做复习记录使用 meta 数据的元数据 也就是程序员可以自己自定义的一些变量
  • 5G QoS管理及与DRB映射关系

    前言 无线网络是一个等级森严的体系 一直以来 无线资源都是紧张的 因而无线网络上的各种业务所享受的服务也无法平等 网络需要优先保障重要的业务 比如 相比普通上网的数据业务 音视频数据业务的优先级会更高 相比音视频数据业务 语音通话的优先级会
  • JVM对象内存布局

    HotSpot虚拟机中 对象在内存中的存储布局分3部分 对象头 实例数据 对齐填充 一 对象头 对象头包含两部分信息 对象的运行时数据和类型指针 1 对象的运行时数据 对象的运行时数据非常多 主要有哈希码 GC分代年龄 锁状态标志 线程持有
  • VMware虚拟机安装Linux系统教程(图文详解)

    一 安装 VMware 1 VMware虚拟机下载 链接 https pan baidu com s 1TElrJharG7jX25D9QO2Iyw pwd 5a8n 提取码 5a8n 安装 选一下安装地址 一直下一步即可 可能会要求重启电
  • Yii Framework 开发教程(30) Zii组件-ListView 示例

    CListView可以用来显示列表 CListView支持使用自定义的View模板显示列表的的记录 因此可以非常灵活的显示数据的表 这点有点像Android的ListView CListView 支持分页和排序 分页和排序支持使用AJAX实
  • vue项目部署到服务器打不开,Vue 项目部署到服务器的问题解决方法_盂希_前端开发者...

    相信很多小伙伴在用开发的时候 在 如何打包 基于 如何部署 将打包出来的 但有时候 我们会直接将dist文件扔到服务端 出现的问题 打包到服务器后 出现 打包到服务器后 出现空白页的问题 打包到服务器后 出现引入的 打包到服务器后 出现路由
  • MD5,SHA1,SHA256,NTLM,LM等Hash在线破解网站收集

    MD5 http hashchecker de find html http paste2 org p 441222 http r0ot podzemlje net x md5 http hashkiller com index php a
  • i春秋 从0到1CTFer成长之路-CTF中的SQL-1注入

    这是本萌新第一次写博客 作为对前面的学习的总结 如有错误 欢迎各位师傅们指正 如何判断注入类型我就不做过多的解释 不知道同学请移步去学习 手动狗头 CTF中的SQL注入 我采用的是手注 根据经验判断是字符型注入 接下来就来查看有几列 ord
  • 区块链学习7:超级账本项目Hyperledger与Fabric以及二者的关系

    前往老猿Python博文目录 一 超级账本 hyperledger 超级账本 hyperledger 是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目 成员包括金融 银行 物联网 供应链 制造和科技行业的领头羊 h
  • GBDT和随机森林的区别

    GBDT和随机森林的相同点 1 都是由多棵树组成 2 最终的结果都是由多棵树一起决定 GBDT和随机森林的不同点 1 组成随机森林的树可以是分类树 也可以是回归树 而GBDT只由回归树组成 2 组成随机森林的树可以并行生成 而GBDT只能是
  • 关注物联网、关注NB-IoT

    概述 关注物联网 关注NB IoT 跟紧时代步伐 让更多人深入理解5G用意 在当下情况下 今天就来来聊一聊NB IoT 特意整理了一些NB IoT的入门级问题 问 NB IoT的优势是什么 答 支持单小区50K用户连接 做上传用低功耗优势明
  • 【SpringBoot深入浅出系列】SpringBoot集成Eureka及Feign

    目录 前言 一 Eureka 是什么 二 Feign 是什么 三 集成步骤 1 创建 Eureka 服务注册中心 1 添加依赖 2 添加配置 3 启动类添加注解 4 启动服务 2 创建 SpringBoot 项目 provider 1 添加