首页 > 其他分享 >SpringCloud-创建服务消费者-Feign方式(附代码下载)

SpringCloud-创建服务消费者-Feign方式(附代码下载)

时间:2023-03-12 10:34:43浏览次数:41  
标签:web Feign spring 代码 springframework SpringCloud org import cloud


场景


在上面已经实现服务注册中心、服务提供者和以Ribbon方式实现服务消费者的前提下,使用另一种Feign方式实现服务消费者。

Feign

Feign 是一个声明式的伪 Http 客户端,它使得写 Http 客户端变得更简单。使用 Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用 Feign 注解和 JAX-RS 注解。Feign 支持可插拔的编码器和解码器。Feign 默认集成了 Ribbon,并和 Eureka 结合,默认实现了负载均衡的效果

注:

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

参考上面构建项目的方式,依次建立目录hello-spring-cloud-web-admin-feign目录以及在

目录下新建pom.xml,并将其托管。然后新建src/main/java目录和src/main/resources目录并分别进行目录设置。

然后在java下新建包,包下新建启动类,在resources下新建配置文件application.yml。

完成后的目录为:

SpringCloud-创建服务消费者-Feign方式(附代码下载)_服务提供者

 

pom.xml代码:

<?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>

<parent>
<groupId>com.badao</groupId>
<artifactId>hello-spring-cloud-dependencies</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../hello-spring-cloud-dependencies/pom.xml</relativePath>
</parent>

<artifactId>hello-spring-cloud-web-admin-feign</artifactId>
<packaging>jar</packaging>

<name>hello-spring-cloud-web-admin-feign</name>
<url>javascript:void(0)</url>
<inceptionYear>2019-Now</inceptionYear>

<dependencies>
<!-- Spring Boot Begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot End -->

<!-- Spring Cloud Begin -->
<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>
</dependency>
<!-- Spring Cloud End -->

<!-- 解决 thymeleaf 模板引擎一定要执行严格的 html5 格式校验问题 -->
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.badao.hello.spring.cloud.web.admin.feign.WebAdminFeignApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>

注:

这里的parent标签要与上面的统一的依赖管理对应起来。

要修改指定的程序入口类为自己相应的路径。

然后应用启动类的代码:

package com.badao.hello.spring.cloud.web.feign;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class WebAdminFeignApplication {
public static void main(String[] args) {
SpringApplication.run(WebAdminFeignApplication.class, args);
}
}

注:

通过 @EnableDiscoveryClient 注解注册到服务中心

通过 @EnableFeignClients 注解开启 Feign 功能

然后是配置文件application.yml

spring:
application:
name: hello-spring-cloud-web-admin-feign
thymeleaf:
cache: false
mode: LEGACYHTML5
encoding: UTF-8
servlet:
content-type: text/html

server:
port: 8765

eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/

 

注:

1.服务注册与发现是根据上面的name去寻找。

2.port表示端口号。

3.serviceURL设置eureka的地址,与上面创建服务注册中心时的URL对应。

与使用Ribbon方式不同的是,这里需要创建service接口,而不是service类。

SpringCloud-创建服务消费者-Feign方式(附代码下载)_spring_02

 

AdminService接口代码:

package com.badao.hello.spring.cloud.web.feign.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(value = "hello-spring-cloud-service-admin")
public interface AdminService {

@RequestMapping(value = "hi", method = RequestMethod.GET)
public String sayHi(@RequestParam(value = "message") String message);
}

注:

通过@FeignClient(value = "hello-spring-cloud-service-admin")来指定调用哪个服务。

这里就是对应上面服务提供者的配置文件的name属性。

然后再新建Controller包,包下新建AdminController

package com.badao.hello.spring.cloud.web.feign.controller;


import com.badao.hello.spring.cloud.web.feign.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AdminController {

@Autowired
private AdminService adminService;

@RequestMapping(value = "hi", method = RequestMethod.GET)
public String sayHi(@RequestParam String message) {
return adminService.sayHi(message);
}
}

为了体现出负载均衡效果,我们要启动两台service-admin,即启动两个服务提供者。

我们先启动服务注册中心Eureka服务8761端口,再以8762端口启动一个服务提供者,然后点击Run-Edit Configuration,将启动单实例去掉。

SpringCloud-创建服务消费者-Feign方式(附代码下载)_服务提供者_03

 

然后修改服务提供者的配置文件中端口号为8763,再启动一个服务提供者。

SpringCloud-创建服务消费者-Feign方式(附代码下载)_spring_04

 

消费者要想实现负载均衡的效果,应该一会访问8762的服务提供者,一会访问8763的服务提供者。

然后运行当前服务消费者的启动程序。

打开浏览器输入:

​​http://localhost:8765/hi?message=HelloFeign​​

SpringCloud-创建服务消费者-Feign方式(附代码下载)_spring_05

此时的架构

一个服务注册中心,Eureka Server,端口号为:8761
service-admin 工程运行了两个实例,端口号分别为:8762,8763
web-admin-feign 工程端口号为:8765


标签:web,Feign,spring,代码,springframework,SpringCloud,org,import,cloud
From: https://blog.51cto.com/BADAOLIUMANGQZ/6115501

相关文章

  • SpringCloud -创建统一的依赖管理
    场景SpringCloud为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性Token,全居琐,Leader选举,分布式Session,集群状态)中快速构建的工具,使用Spring......
  • Docker Compose部署Nexus3时的docker-compose.yml代码
    场景在上面实现基本的Compose的操作的基础上,实现使用DockerCompose搭建Nexus3。注:关注公众号霸道的程序猿获取编程相关电子书、教程推送与免费下载。实现version:'3'ser......
  • 代码随想录-数组部分
    一.二分查找力扣题目链接给定一个 n 个元素有序的(升序)整型数组 nums和一个目标值 target ,写一个函数搜索 nums 中的target,如果目标值存在返回下标,否则返回-1......
  • SpringCloud第一部分(认识微服务、RestTemplate、Eureka、Ribbon、Nacos、Feign)
    认识微服务单体架构将业务的所有功能集中在一个项目中开发打成一个包部署优点:架构简单部署成本低缺点:耦合度高分布式架构根据业务功能对系统进行拆分,每个业......
  • 代码随想录训练营day10|第18题. 四数之和、344.反转字符串、541. 反转字符串II、哈希
    第18题.四数之和题目链接:第18题.四数之和题目描述:给定一个包含n个整数的数组nums和一个目标值target,判断nums中是否存在四个元素a,b,c和d,使得a+b+c+d......
  • 低代码适用场景
    应用开发场景可以分成以下类型:1.业务流程应用使用低代码平台,企业可以创建员工真正喜欢的现代的、精美的业务应用。包括ERP系统、OA系统、CRM系统、WMS系统……几乎涵盖了......
  • 代码随想录day 6|指针总结
    环形链表题目链接:142、环形链表Ⅱ题目描述:给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,使用整数pos来表示链表尾连......
  • 从代码层面来讲,何时使用设计模式
    1工厂模式想通过名称获取对象2抽象工厂模式单个工厂不满足对象的生产3单例模式全局只有一个对象4建造者模式通过构造函数创建对象不方便,例如,构造函数参数太多5原型模式......
  • 量子图形加密算法的MATLAB代码实现
    一、概述目前主流的量子图形加密算法有量子像素编码算法(QuantumImagePixelEncoding,QIPE)、量子像素置乱算法(QuantumImagePixelScrambling,QIPS)等。一个简......
  • 代码随想录11天逆波兰表达式求值
    150. 逆波兰表达式求值给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。注意:有效的算......