日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IDEA项目搭建七——使用Feign简化消费者端操作

發布時間:2025/4/9 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IDEA项目搭建七——使用Feign简化消费者端操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、簡介

我們可以看到上一篇文章的消費者這邊調用Service時比較麻煩,所以我們可以使用Feign來簡化這部分操作,它底層也是使用Ribbon實現的只是Ribbon支持HTTP和TCP兩種通信協議,而Feign只支持HTTP一種,同樣支持負載均衡,所以能滿足90%以上的需求了。

二、搭建生產者模塊

其實這部分是通用的,對于消費者這邊使用什么Client并沒有影響,Eureka還是使用之前搭建好的,生產者模塊也用搭建好的,我們新建一個controller用于承接service,這邊就算完成了

import javademo.tyh.model.hotel.BaseInfoModel; import javademo.tyh.model.hotel.ResponseModel; import javademo.tyh.model.hotel.SearchModel; import javademo.tyh.service.hotel.service.HotelService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest; import java.util.List;@Controller @RequestMapping("/api/hotel") public class HotelController {//自動注入請求對象,查看header信息 @AutowiredHttpServletRequest request;@AutowiredHotelService service;@ResponseBody@RequestMapping("/test")public void test() {//do something... }@ResponseBody@RequestMapping("/get")public BaseInfoModel get(@RequestParam(defaultValue = "0") int id) {String tyh = request.getHeader("taiyonghai");//獲取Header頭信息System.out.println("參數為:" + id);return service.get(id);}//設置參數為@RequestBody可以自動序列化為對象 @ResponseBody@RequestMapping("/list")public ResponseModel<List<BaseInfoModel>> list(@RequestBody SearchModel search) {System.out.println("參數為:" + search.getName());List<BaseInfoModel> list = service.list();ResponseModel<List<BaseInfoModel>> respModel = new ResponseModel<>();respModel.setCode("000000");respModel.setMsg("操作成功");respModel.setData(list);return respModel;} }

添加通用Model實體,同樣不生成get/set方法,自己生成吧

import com.baomidou.mybatisplus.annotations.TableName; import java.time.LocalDateTime;@TableName("base_info") public class BaseInfoModel {private int id;private String nickname;private LocalDateTime updateTime; } public class SearchModel {private int id;private String name; } public class ResponseModel<T> {private String code;private String msg;private T data; }

??

?三、搭建消費者模塊——Feign

還是創建一個Maven模塊,看一下我的項目結構

??

1、修改pom.xml文件,增加對spring boot、spring cloud、feign的引用?

<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.0.3.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Finchley.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- import spring boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- import openfeign --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

??2、新建resources文件夾,新建application.yml配置文件,并修改內容如下

#設置自己的程序名稱 spring:application:name: javademo-tyh-web-hotel#thymeleaf 配置 thymeleaf:encoding: UTF-8prefix: classpath:/templatescache: false #服務注冊中心地址(剛剛搭建的Eureka Server的地址) eureka:client:#是否向服務中心注冊自己register-with-eureka: false#設置eureka服務中心的地址service-url:defaultZone: http://localhost:11000/eureka #設置自己啟動的端口 server:port: 13000

?3、修改main()方法的類,增加Feign的注解

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients;//引入Feign注解 @EnableFeignClients @SpringBootApplication public class AppWebHotel {public static void main(String[] args) {SpringApplication.run(AppWebHotel.class, args);} }

?4、新建service文件夾,新建HotelService的Interface用來執行Feign向后端服務生產者的調用,指明服務生產者名稱,接口方法指明具體的服務路由,這種方式比Ribbon簡單很多,而且更直觀更像調用后臺方法

import javademo.tyh.model.hotel.BaseInfoModel; import javademo.tyh.model.hotel.ResponseModel; import javademo.tyh.model.hotel.SearchModel; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import java.util.List;@Service @FeignClient("javademo-tyh-service-hotel")//指明服務生產者名稱 @RequestMapping("/api/hotel")//此位置的mapping與controller上的mapping是共享全局唯一的,如果這里的名字和controller的路由相同會報錯ambiguous mapping public interface HotelService { // //無參數無返回值 // @RequestMapping("/test") // void test();//基礎類型參數@RequestMapping("/get")BaseInfoModel get(@RequestParam("id") int id);//自定義類型參數以及泛型返回值@RequestMapping("/list")ResponseModel<List<BaseInfoModel>> list(@RequestBody SearchModel search); }

??5、新建controller文件夾,新建HotelController的class用來接收頁面調用

import javademo.tyh.model.hotel.BaseInfoModel; import javademo.tyh.model.hotel.ResponseModel; import javademo.tyh.model.hotel.SearchModel; import javademo.tyh.web.hotel.service.HotelService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.List;@Controller @RequestMapping("/hotel") public class HotelController {//自動注入Feign接口對象 @AutowiredHotelService service;@RequestMapping("/get")public String get(Model model) {//像調用方法一樣調用即可實現服務生產者端的調用model.addAttribute("model",service.get(1));return "/hotel/get";}//直接返回json不寫頁面了 @ResponseBody@RequestMapping("/list")public List<BaseInfoModel> list() {SearchModel search = new SearchModel();search.setId(1);search.setName("taiyonghai");ResponseModel<List<BaseInfoModel>> result = service.list(search);return result.getData();} }

?6、在resources文件夾下建立templates及hotel文件夾,新建get.html頁面,用來渲染數據

<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <h1>this is /hotel/get</h1><label th:text="${model.Id}">id</label> <label th:text="${model.Nickname}">Nickname</label> <label th:text="${model.UpdateTime}">UpdateTime</label></body> </html>

?OK,現在啟動Eureka注冊中心、啟動服務生產者、啟動服務消費者訪問http://localhost:13000/hotel/get就可以看到從service取到的結果了

本應該在這里就完成了,但有時候我們需要在Header頭信息中增加些公共內容,在Feign中就可以使用如下方式實現

在消費者這邊的service文件夾下新建FeignInterceptor實現RequestInterceptor接口

import feign.RequestInterceptor; import feign.RequestTemplate; import org.springframework.stereotype.Component;//使用攔截器添加Header頭信息 @Component public class FeignInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate requestTemplate) {System.out.println("調用了FeignInterceptor");requestTemplate.header("taiyonghai", "1111111111111");} }

?Feign的簡單使用就OK了

?

轉載于:https://www.cnblogs.com/taiyonghai/p/9306244.html

總結

以上是生活随笔為你收集整理的IDEA项目搭建七——使用Feign简化消费者端操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: avav亚洲 | 97视频一区二区三区 | 日韩视频中文字幕 | 男女洗澡互摸私密部位视频 | 羞羞色视频 | 免费a v网站 | 久久精品丝袜高跟鞋 | 中文字幕乱码一区二区 | 日本猛少妇色xxxxx | 成人片黄网站色大片免费毛片 | 男人的天堂免费 | 天堂av8 | 国产jizz| 精品一级少妇久久久久久久 | 欧美日韩国产三级 | 国产丝袜在线播放 | 中文字幕+乱码+中文字幕明步 | 亚洲成人天堂 | 性色欲网站人妻丰满中文久久不卡 | 嫩草视频在线观看视频 | 久久精品资源 | 国产东北真实交换多p免视频 | 国产一区二区免费在线 | 91手机视频在线观看 | 国产精品黑人一区二区三区 | 亚洲电影一区二区 | 一级大片视频 | 在线日韩中文字幕 | 在线观看欧美成人 | sm在线观看| 欧美www| 亚洲天堂成人av | 国产视频不卡一区 | 国产一区二区三区中文字幕 | 三级性视频| av青草 | 欧美精品黑人猛交高潮 | 国产123区| 欧美在线色 | 国产精品99精品久久免费 | 国产成人精品一区二区无码呦 | 综合狠狠开心 | 蜜桃视频成人 | 亚洲a在线播放 | 蜜臀久久99静品久久久久久 | 亚洲麻豆视频 | 黄网在线看 | 欧美片网站yy | 潘金莲一级淫片免费放动漫 | 国产女大学生av | 精品人妻一区二区三区四区不卡 | 国产精品久久久久久久久久久久久久久久久久 | 中文字幕观看在线 | 888奇米影视 | 九色porny视频 | 国产精品探花一区二区在线观看 | 国产成人精品一区二区三区 | 黄色在线观看免费视频 | 琪琪色网 | 欧洲美女粗暴牲交免费观看 | 射综合网| 少妇人妻一区二区 | 日韩第二页 | 国产精品拍拍 | 97免费公开视频 | 成人在线一区二区三区 | 欧美国产日韩一区 | 又粗又大又硬毛片免费看 | 久久密av| 一区二区三区韩国 | 国产一精品一aⅴ一免费 | 免费成人深夜小野草 | 射影院 | 中文在线8资源库 | 色一情一乱一伦一区二区三区 | 国产 中文 字幕 日韩 在线 | 欧美成人三级在线 | 狠狠干性视频 | 亚洲激情二区 | xxxx国产精品 | 久久伊 | 色欧美视频| 亚洲AV无码成人片在线观看 | 老熟妇高潮一区二区高清视频 | 日韩成人av免费在线观看 | 色综合一区二区 | 黄色激情毛片 | 丝袜av在线播放 | 日韩欧美久久精品 | 奇米精品一区二区三区在线观看 | 亚洲男人皇宫 | 成全影视在线观看第8季 | 色小说综合 | 日韩第三页 | 久久综合区 | 午夜激情视频在线 | 日本不卡一 | 91美女网| 国产亚洲精久久久久久无码苍井空 |