1. 程式人生 > >springboot中整合feign實現模組間http介面呼叫

springboot中整合feign實現模組間http介面呼叫

1.場景還原

     在多模組開發的過程中,為了避免一些重複的“硬程式碼”的編寫,我們可以在A模組中定義一個實現類,然後在B模組中遠端呼叫,這樣減少了程式碼冗餘及業務硬程式碼的重複編寫

2.實現方案

這裡以筆者專案的訂單模組遠端呼叫狀態機模組介面為例,僅供參考

①訂單模組的pom依賴

<dependency>
   <groupId>io.github.openfeign</groupId>
   <artifactId>feign-core</artifactId>
   <version>9.5.0</version>
</dependency>
<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-slf4j</artifactId> <version>9.5.0</version> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-hystrix</artifactId>
<version>9.5.0</version> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-jackson</artifactId> <version>9.5.0</version> </dependency>

②訂單模組中狀態機ip的配置conf.yml

fsm:
  url: http://localhost:8072/

③遠端url的控制元件申明

@ConfigurationProperties(prefix = "fsm")
@PropertySource(value = "classpath:conf.yml")
@Component
@Data
public class SelfConf {

    @Value("${url}")
    private String url;
}

④狀態機模組定義一個查詢訂單詳情的controller

@RestController
@Slf4j
@RequestMapping("/v1.0/dispatch/fsm")
public class DispatchFsmController {

    @Autowired
private YiViDispatchOrderMapper yiViDispatchOrderMapper;
@GetMapping(value = "/feign")
    public YiViDispatchOrder feign(){
        return yiViDispatchOrderMapper.selectByPrimaryKey("10efe91d-8379-11e8-b461-ecebb8d1d4af");
}}

⑤訂單模組實現遠端呼叫的client

首先定義service

public interface DispatchOrderFsmService {

    @Headers({"Content-Type: application/json"})
    @RequestLine("GET /v1.0/dispatch/fsm/feign")
    public YiViDispatchOrder feign();
}

然後實現client

@Service
public class DispatchOrderFsmClient {

    @Autowired
private SelfConf selfConf;
    private DispatchOrderFsmService init()
    {
        return Feign.builder()
                    .decoder(new JacksonDecoder())
                    .encoder(new JacksonEncoder())
                    .target(DispatchOrderFsmService.class, this.selfConf.getUrl());
}

    public YiViDispatchOrder feign()
    {
        DispatchOrderFsmService orderFsmService = init();
        return orderFsmService.feign();
}

}

⑥訂單模組client的controller

@RestController
@RequestMapping("/v1.0/dispatch/order")
public class DispatchOrderController {
@Autowired
private DispatchOrderFsmClient dispatchOrderFsmClient;
//測試
@RequestMapping(value = "/feign", method = RequestMethod.GET)
    @ResponseBody
public YiViDispatchOrder feign() throws Exception {

        return  dispatchOrderFsmClient.feign();
}}

3.測試用例

①狀態機模組訂單詳情介面的訪問


②訂單模組client的訪問


這樣通過訪問訂單模組的介面間接訪問到了狀態機模組介面;

好了,我是張星,歡迎加入博主技術交流群,群號:526601468

相關推薦

springboot整合feign實現模組http介面呼叫

1.場景還原     在多模組開發的過程中,為了避免一些重複的“硬程式碼”的編寫,我們可以在A模組中定義一個實現類,然後在B模組中遠端呼叫,這樣減少了程式碼冗餘及業務硬程式碼的重複編寫2.實現方案這裡以筆者專案的訂單模組遠端呼叫狀態機模組介面為例,僅供參考①訂單模組的pom依

Springboot整合Spring data elasticsearch,實現相關CRUD介面

專案環境: JDK:1.8 SringBoot:2.1.0.RELEASE Gardle:gradle-4.10.2 ElasticSearch:elasticsearch-6.2.4 Spring-data-elasticsearch:spring-data-el

定時任務-----Springboot使用Scheduled做定時任務----http://www.cnblogs.com/lirenqing/p/6596557.html

clas html RR work blog PE date() span org Springboot中使用Scheduled做定時任務---http://www.cnblogs.com/lirenqing/p/6596557.html 已經驗證的方案: pom文件加入依

SpringBoot整合發郵件的功能

今天在看自己的一個SpringBoot專案,看到自己以前的一個老專案中的一個發郵件的功能,變想再SpringBoot中整合發郵件的功能; 一:專案依賴;   <!-- javax.mail --> <dependency> <groupId

SpringBoot整合JWT實現使用者認證

初始JWT 1.什麼是JWT JSON Web Token (JWT) 是一個開放標準 (RFC 7519),它定義了一種緊湊且獨立的方式,可以在客戶端與伺服器之間作為JSON物件安全地傳輸資訊。 2.JWT使用場景 身份驗證: 使用者在登入以後,後續的每個請求都

SpringBoot整合swagger形成API文件

SpringBoot中整合swagger形成API文件 環境版本 開始使用 1.新增依賴 2.新增Swagger2配置類 3.在Controller中使用 4.訪問 環境版本 springboo

zuul動態路由整合hystrix實現熔斷保護並整合feign實現宣告式服務呼叫

上一篇中。將userService提供服務的返回時間延遲4000ms。導致feign在呼叫時候出發熔斷。直接返回fallback回撥。 這一篇中加入zuul實現動態路由功能。並加入ZuulFilter的前置過濾功能。zuul整合hystrix預設在早期版本是開啟的。但在後期 版本就關閉了自動

SpringBoot整合redis實現快取

主要程式碼: String key = "teacher_"+id; boolean hasKey = redisTemplate.hasKey(key); ValueOperations<String,Teacher> o

springboot整合memcached

前言 Memcached 是一個高效能的分散式記憶體物件快取系統,其儲存效能在某些方面不比redis,甚至在文字型別資料的儲存上效能略優於redis,本文將介紹如何在springboot中整合memcached   準備工作 首先我們需要一款客戶端連線物件,類似於我們在使用redi

springboot整合POI

1,匯入pom依賴 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <

springboot使用redis實現非同步訊息通知

為什麼我要用redis來完成非同步訊息,而不是訊息佇列mq之類的? 因為很多的單體專案可能只需要需要一個略微簡單的訊息通知,而不需要如kafka那種完善的訊息佇列, 而且redis在正常的專案中基本都會引入而mq可能較少會引入,所以使用redis來實現訊息通知可以減少不必

SpringBoot使用redis實現訊息佇列

在pom中加入redis依賴: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-r

springboot應用整合springbootadmin實現應用監控(解決無法傳送郵件問題)

架設服務端 1.新增依賴springbootadmin和spring security <dependency> <groupId>org.springframework.boot</groupId

SpringBoot原始碼---SpringBoot的SPI實現方式

    上一篇文章中提到SpringBoot中實現自動配置時,用到了SPI機制。不知道會不會有有心人去看看我推薦的那篇博文。本篇文章將從程式碼的層次深入解讀Springboot的SPI機制。    首先,是一個很重要的註解@EnableAutoConfiguration,它

springboot整合bootstrap

比較簡單,不要想的太複雜了。首先匯入依賴bootstrap與jquery:<!-- https://mvnrepository.com/artifact/org.webjars/bootstrap -->        <!-- bootstrap --&g

訊息機制簡單實現模組解耦

訊息機制一直是軟體開發中減少模組之間耦合的標準方式,下面我們舉一個簡單的例子,看看是如何通過訊息,減少類 A 和類 B之間的耦合度的。 下面是傳統的方法,實現 A 對 B 類的某個方法的呼叫,不使用訊息機制的傳統方法,A 需要持有 B 的物件,並且 A 要

SpringBoot利用AOP實現攔截器效果

既然使用Spring,AOP就是不了或缺的。 嘗試好多遍,踩了很多坑,最後總算把效果弄出來了。說起來很簡單,只需要建一個類就好了。 @Aspect @Configuration public class InfoInterceptor { private stat

vue整合pdfjs實現分頁線上預覽

<template> <div id="div_read_area_scrool" class="no-scrollbar--x" :style="'text-align:center;height:'+ '500px;'+'overflow: auto;

AndroidBinder機制實現程序通訊

           基本上不管是何種開發都會涉及到程序間通訊的問題,即IPC,而安卓系統的IPC方式主要是Binder,先列舉幾種IPC的方式,對比Binder看看。       Linux裡

springboot 分頁實現

本次要講的是典型的兩種分頁方式,即sql分頁和外掛分頁。 依賴 因為使用了mybatis、mysql ,所以要新增相關依賴。這裡版本沒有特別需求,選擇你想要的版本即可。 <!--mybatis-->