Spring與網關的集成

這是有關Spring Integration系列的第二篇文章。 本文以我們介紹Spring Integration的第一篇文章為基礎。

上下文設置

在第一篇文章中,我們創建了一個簡單的Java應用程序,其中

  1. 通過頻道發送了一條消息,
  2. 它被服務(即POJO)攔截并進行了修改。
  3. 然后通過另一個渠道發送
  4. 從通道讀取并顯示修改后的消息。

但是,在執行此操作時(請記住,我們只是在此處介紹概念),我們在應用程序中編寫了一些特定于Spring的代碼,即測試類。 在本文中,我們將解決這個問題,并使我們的應用程序代碼與Spring Integration api盡可能隔離。

這是通過Spring Integration稱為gateways來完成的 。 存在網關的唯一目的是將消息傳遞相關的“管道”代碼從“業務”代碼中抽象出來。 業務邏輯可能實際上并不在乎是通過通道發送消息還是通過進行SOAP調用來實現功能。 到目前為止,這種抽象雖然合乎邏輯且合乎需要,但并非十分實用。

此時可能值得快速瀏覽一下《 Spring Integration參考手冊》 。 但是,如果您剛剛開始使用Spring Integration,那么暫時最好閱讀本文。 我建議您先洗手,然后再返回參考手冊,該手冊非常好,但也非常詳盡,因此對于初學者來說可能不勝枚舉。

網關可以是帶有批注的POJO(這很方便,但在我看來卻超出了整個目的)或具有XML配置(如果未經檢查,它很快會變成任何體面大小的應用程序的噩夢)。 歸根結底,這確實是您的選擇,但是我喜歡走XML路線。 兩種樣式的配置選項在參考實現的本節中詳細介紹。

Spring與網關的集成

因此,讓我們為HelloWorld服務創建另一個帶有網關拋出的測試(有關更多上下文,請參閱本系列的第一篇文章 )。 讓我們從測試的Spring配置開始。
文件:src / test / resources / org / academy / integration / HelloWorld1Test-context.xml

<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns='http://www.springframework.org/schema/beans'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:p='http://www.springframework.org/schema/p'xmlns:int='http://www.springframework.org/schema/integration'xsi:schemaLocation='http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/integration 
http://www.springframework.org/schema/integration/spring-integration-2.1.xsd'><int:channel id='inputChannel'></int:channel><int:channel id='outputChannel'><int:queue capacity='10' /></int:channel><int:service-activator input-channel='inputChannel'output-channel='outputChannel' ref='helloService' method='greet' /><bean id='helloService' class='org.academy.integration.HelloWorld' /><int:gateway service-interface='org.academy.integration.Greetings'default-request-channel='inputChannel' default-reply-channel='outputChannel'></int:gateway></beans>

在這種情況下,所有不同之處在于我們添加了一個網關。 這是一個稱為org.academy.integration.Greetings的接口。 它與“ inputChannel”和“ outputChannel”交互,分別發送和讀取消息。 讓我們編寫界面。

文件:/src/main/java/org/academy/integration/Greetings.java

package org.academy.integration;public interface Greetings {public void send(String message);public String receive();}

然后,我們添加此接口的實現。 等待。 沒有實現。 而且我們不需要任何實現。 Spring使用一種名為GatewayProxyFactoryBean的東西向該網關注入一些基本代碼,從而使它可以讀取基于字符串的簡單消息,而無需我們做任何事情。 那就對了。 沒事

注–假設您不是在使用Spring Integration框架只是推敲字符串, 就需要為大多數生產方案添加更多代碼 。 因此,不要習慣免費午餐。 但是,盡管它在這里,讓我們深入研究。

現在,讓我們使用網關編寫一個新的測試類(并且完全不與通道和消息進行交互)。
文件:/src/test/java/org/academy/integration/HelloWorld1Test.java

package org.academy.integration;import static org.junit.Assert.*;import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class HelloWorld1Test {private final static Logger logger = LoggerFactory.getLogger(HelloWorld1Test.class);@AutowiredGreetings greetings;@Testpublic void test() {greetings.send('World');assertEquals(greetings.receive(), 'Hello World');logger.debug('Spring Integration with gateways.');}}

現在我們的測試班要干凈得多。 它根本不了解頻道,消息或與Spring Integration相關的任何信息。 它只知道一個問候實例(通過.send()方法向其提供一些數據),并通過.receive()方法獲取修改后的數據。 因此, 業務邏輯忽略了管道邏輯 ,從而使代碼更加簡潔。

現在,只需鍵入“ mvn -e clean install”(或使用m2e插件),您就應該能夠運行單元測試并確認給定的字符串“ World”,HelloWorld服務的確在整個通道安排中確實返回了“ Hello World”和消息。

同樣,可選但我強烈建議您運行“ mvn -e全新安裝站點”。 假設您已正確配置了一些代碼覆蓋率工具(在我的情況下為cobertura),將為您提供一個不錯HTML報告,其中顯示了代碼覆蓋率。 在這種情況下,它將是100%。 我已經寫了一系列關于代碼質量的文章 ,詳細介紹了該主題,但是總而言之,確保我使用和推薦使用的任何編碼實踐/框架都符合一些基本的代碼質量標準對我來說非常重要。 。 能夠進行單元測試和測量是我所做的這樣一項基本檢查。 毋庸置疑,一般來說,Spring(包括Spring集成)會通過帶有鮮艷色彩的檢查。

結論

本文就是這樣。 快樂的編碼。

建議進一步閱讀...

以下是本系列早期文章的鏈接:

  1. Hello World with Spring 3 MVC
  2. 使用Spring 3 MVC處理表單
  3. 使用Spring 3進行單元測試和記錄
  4. 使用Spring 3 MVC處理表單驗證
  5. 引入Spring集成

這些是我可以推薦的出色材料:

  1. Spring Integration入門
  2. Spring Integration的示例代碼
  3. Spring集成–第1節– Hello World
  4. Spring集成–第2節–更多世界

參考: Tech for Enterprise博客上我們JCG合作伙伴 Partho的Spring與Gatways的集成 。


翻譯自: https://www.javacodegeeks.com/2012/08/spring-integration-with-gateways.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371849.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371849.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371849.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UIAutomation識別UI元素

MS UI Automation&#xff08;Microsoft User Interface Automation&#xff1a;UIA&#xff09;是隨.net framework3.0一起發布的&#xff0c;雖然在如今這個幾乎每天都有各種新名詞、新技術出來的所謂的21世紀&#xff0c;它顯得已經有些過時了。前些日子&#xff0c;正好一個…

【C++第一個Demo】---控制臺RPG游戲3【登陸菜單樹】

【登陸系統--樹結構】 1 首先我這里設計&#xff0c;由一個基類MainMenu構建樹結構&#xff0c;并實現控制臺上菜單之間的切換和返回操作 1 #ifndef _UI_BASE_H_2 #define _UI_BASE_H_3 4 #include <string>5 #include <vector>6 #include"..//Marco.h"7…

不存在_施文忠 | ”存在“與“不存在”——巴蜀文明概論

海德格爾有句名言&#xff1a;“存在者存在&#xff0c;不存在者不存在&#xff01;”四川&#xff0c;一個偉大的存在&#xff0c;偏偏存在于四川的口頭禪卻是“不存在”。在不存在中追求存在&#xff0c;在存在中擺脫存在。六月白鹿鎮&#xff0c;書院學習了《李白與海德格爾…

Spring和JSF集成:異常處理

大多數JSF開發人員都會熟悉“發生錯誤”頁面&#xff0c;當在他們的代碼某處引發意外異常時&#xff0c;該頁面就會顯示。 該頁面在開發時確實很有用&#xff0c;但對于生產應用程序通常不是您想要的。 通常&#xff0c;在用庫存JSF替換此頁面時&#xff0c;您有兩種選擇。 您可…

Altium 原理圖出現元件“Extra Pin…in Normal of part ”警告的解決方法

轉載于&#xff1a; http://blog.csdn.net/idoming/article/details/45575627 使用Altium Designer的時候編譯完后&#xff0c;只關注過錯誤沒有關注過警告&#xff0c;現在認真排查一下有哪些警告。 正在進行的項目原理圖編譯完成后提示標題中的警告信息。經過在網上搜索&…

XidianOJ 1087 浪漫的V8

題目描述 V8為了討女朋友開心&#xff0c;給lx承包大活后面那個水塘。為了籌集資金&#xff0c;V8偷偷地溜進了一座古墓&#xff0c;發現在他面前有金光閃閃的若干小箱子&#xff0c;里面全都是金粉&#xff0c;作為橫行于各種#&#xffe5;&場所的V8來說&#xff0c;辨別不…

curl php 模擬來源_php 使用curl模擬ip和來源進行訪問的實現方法

對于限制了ip和來源的網站&#xff0c;使用正常的訪問方式是無法訪問的。本文將介紹一種方法&#xff0c;使用php的curl類實現模擬ip和來源&#xff0c;訪問那些限制了ip和來源的網站。1.設置頁面限制ip和來源訪問server.php$client_ip getip();$referer getreferer();$allow…

堆棧C語言實現

堆棧的抽象數據類型描述&#xff1a; 類型名稱&#xff1a; 堆棧&#xff08;Stack&#xff09;。數據對象集&#xff1a; 一個有 0 個或多個元素的又窮表。操作集&#xff1a; 長度為 max_size 的堆棧 S ∈ Stack&#xff0c; 堆棧元素 item ∈ ElementType。stack creatc_sta…

woocommerce 分類到菜單_Woocommerce商店顯示分類

我是wordpress的新手, 所以如果我輸入的語言錯誤, 請仍然為我提供幫助。我想使用woocommerce顯示具有可變產品的商店, 我希望商店鏈接登錄頁面顯示具有該類別特征圖像的商店類別。我當前的商店頁面顯示所有產品, 并分頁到其他產品頁面, 我找不到所有產品的模板。當我進入wp-adm…

JBoss BRMS 5.3 –添加了業務活動監視(BAM)報告

自從JBoss BRMS 5.3產品發布以來&#xff0c;添加了jBPM 5 BPM組件的最常見問題之一是業務活動監視&#xff08;BAM&#xff09;和報告功能。 本文將引導您完成添加過程&#xff0c;但是請注意&#xff0c;在撰寫本文時&#xff0c;這不是產品的受支持功能。 在JBoss BRMS 5.3上…

Zookeeper開源客戶端框架Curator簡介

Curator是Netflix開源的一套ZooKeeper客戶端框架. Netflix在使用ZooKeeper的過程中發現ZooKeeper自帶的客戶端太底層, 應用方在使用的時候需要自己處理很多事情, 于是在它的基礎上包裝了一下, 提供了一套更好用的客戶端框架. Netflix在用ZooKeeper的過程中遇到的問題, 我們也遇…

【樹形DP】 HDU 2196 Computer

題意&#xff1a;求節點間的最大距離 先DFS一次 記錄下 每一節點的子樹下的最大距離&#xff08;DP[ u ] [ 0 ]&#xff09;和第二大距離&#xff08;DP[ u ] [ 1 ]&#xff09; 用DP[ v ] [ 2 ] 表示由v的父節點來的最大距離 再取DP[ u ] [ 0 ] 與 DP[ u ][ 2 ] 的最值 #inclu…

適當的Java堆大小的5個技巧

確定生產系統合適的Java堆大小不是一件容易的事。 在我的Java EE企業經驗中&#xff0c;我發現由于Java堆容量和調整不足而導致的多個性能問題。 本文將為您提供5個技巧&#xff0c;這些技巧可以幫助您確定當前或新生產環境的最佳Java堆大小。 這些技巧中的一些對于預防和解決j…

pythondocumentation是什么_怎樣閱讀Python官方文檔

如何閱讀官方Python文檔的初學者,因為他們沒有相關的經驗,學習語言通常是費時且勞動密集型和效果不是很好。下面簡要介紹如何閱讀官方文件。一旦你學會快速查詢官方文件,學習效率會提高很多文檔門戶。如何閱讀API文檔中內容標準庫,如何快速找到你想要的。第一種方法是先查找索引…

數據庫過大無法導入

導SQL數據庫結構數據時&#xff0c;如果數據是批量插入的話會報錯&#xff1a;2006 - MySQL server has gone away。 解決辦法&#xff1a;找到你的mysql目錄下的my.ini配置文件&#xff0c;加入以下代碼 max_allowed_packet500M wait_timeout288000 interactive_timeout 2880…

UVa 11475 - Extend to Palindrome

題目&#xff1a;給你一個字符串&#xff0c;在後面拼接一部分使得它變成回文串&#xff0c;使得串最短。輸出這個回文串。分析&#xff1a;KMP&#xff0c;dp。這裡利用KMP算法將串和它的轉置匹配&#xff0c;看結束時匹配的長度就可以。 因為串比較長。使用KMP比較合適&#…

構建Java Web應用程序時遵循MVC的三個步驟

步驟1 做 始終通過servlet / action bean處理URL&#xff08;POST表單&#xff0c;單擊鏈接等&#xff09;&#xff0c;而不是通過JSP處理 為什么 ActionBeans&#xff08;無論某些框架調用那些類&#xff09;&#xff0c;而servlet很少是控制器 用于處理用戶輸入。 JSP是專用于…

曝光原理_泰國精戈咖啡效果反饋 作用原理曝光

我的男人才三十五六&#xff0c;兩個人就開始分開睡了&#xff0c;自從咱們在一起以來&#xff0c;咱們的感情一向很好&#xff0c;這是十分調和的。但隨著年紀的添加&#xff0c;我逐漸發現他身體闌珊的越來越兇猛&#xff0c;夫妻生活方面硬度逐漸下降&#xff0c;時間也越來…

使用junit4測試Spring

Spring 提供便捷的測試&#xff0c;非常方便整合Junit 導入 spring-test-3.2.0.RELEASE.jar ---- 提供與Junit的整合 RunWith(SpringJUnit4ClassRunner.class) // 整合 ContextConfiguration(locations"classpath:applicationContext.xml") // 加載配置public class…

EasyCriteria –使用JPA Criteria的簡便方法

今天&#xff0c;我們將看到有關此工具的信息&#xff0c;該工具使使用JPA Criteria更加容易。 使用該庫的應用程序將在JPA實現中更加簡潔&#xff0c;易于使用和可移植。 在本文的結尾&#xff0c;您將找到要下載的源代碼。 什么是標準&#xff1f; 當前是創建動態查詢的最佳…