Gateway和Service Activator作爲消息端點(根據企業集成模式)有什麼區別?Gateway與Service Activator有什麼區別?
17
A
回答
11
1
對我來說,網關用於進行抽象併爲一個或多個後端服務提供規範化的API。 例如,您有5個提供者使用不同的方式與您進行交互(SOAP,REST,XML/http,不管),但您的客戶端只需要一種方法來獲取數據(讓json/REST說)。 網關將轉換您的客戶端的json請求並將其轉換爲具有自己協議的右後端,之後它會將後端響應轉換爲json以將響應提供給客戶端。
服務激活器更多地作爲傳入消息的觸發器。假設您的激活器輪詢傳入消息的數據庫,然後當條件滿足「激活」時,它會調用基礎服務。
6
服務激活調用對象,其中該應用程序開發者提供的執行情況的方法。 Spring Integration負責使用來自輸入通道的消息調用該方法,並將結果分流到某個輸出通道。應用程序提供的代碼可以執行一些任意的工作。
對於網關應用程序開發人員只提供一個接口,它的實現是由Spring提供的。
Spring集成文檔的附錄包括Cafe example,其中Barista是通過服務激活器調用的服務,Cafe是網關。
應用程序的主要方法從Spring應用程序上下文中查找一個咖啡廳對象,並調用placeOrder,它在傳遞一個訂單作爲參數:
public static void main(String[] args) {
AbstractApplicationContext context = null;
if (args.length > 0) {
context = new FileSystemXmlApplicationContext(args);
}
else {
context = new ClassPathXmlApplicationContext(
"cafeDemo.xml", CafeDemo.class);
}
Cafe cafe = (Cafe) context.getBean("cafe");
for (int i = 1; i <= 100; i++) {
Order order = new Order(i);
order.addItem(DrinkType.LATTE, 2, false);
order.addItem(DrinkType.MOCHA, 3, true);
cafe.placeOrder(order);
}
}
咖啡廳是,應用程序沒有接口提供一個實現。 Spring生成一個實現,將傳遞給它的Orders發送到名爲「orders」的輸入通道。
更深入的管道,有兩個服務激活器有一個參考咖啡師。咖啡師是具有代碼來創建這樣的喝POJO:
public Drink prepareHotDrink(OrderItem orderItem) {
try {
Thread.sleep(this.hotDrinkDelay);
System.out.println(Thread.currentThread().getName()
+ " prepared hot drink #" + hotDrinkCounter.incrementAndGet()
+ " for order #" + orderItem.getOrder().getNumber()
+ ": " + orderItem);
return new Drink(orderItem.getOrder().getNumber(),
orderItem.getDrinkType(),
orderItem.isIced(), orderItem.getShots());
}
catch (InterruptedException e) {
Thread.currentThread().interrupt();
return null;
}
}
咖啡師從服務激活的輸入通道接收飲料的訂單,並有一個名爲方法就可以返回一個飲料,其被髮下來服務激活器的輸出通道「preparedDrinks」。
相關問題
- 1. SMS Carrier&SMS Gateway有什麼區別?
- 2. Docker Service和Docker Container有什麼區別?
- 3. 'service'和'server'有什麼區別?
- 4. Service和IntentService有什麼區別?
- 5. Facade和Gateway設計模式有什麼區別?
- 6. 繼承與類別有什麼區別
- 7. Text Service和輸入法編輯器有什麼區別?
- 8. Android中的Thread.run()和Handler.post()和Service有什麼區別?
- 9. AWS:Simple Workflow Service和Data Pipeline有什麼區別?
- 10. 有什麼區別
- 11. 有什麼區別
- 12. 有什麼區別?
- 13. 有什麼區別?
- 14. 有什麼區別?
- 15. 有什麼區別
- 16. ....有什麼區別?
- 17. 有什麼區別?
- 18. 有什麼區別
- 19. 有什麼區別
- 20. 有什麼區別
- 21. 有什麼區別?
- 22. 有什麼區別`和$(Bash中有什麼區別?
- 23. 與%i和%li有什麼區別?
- 24. ldapAuthentication與inMemoryAuthentication有什麼區別?
- 25. float x []與float [] x有什麼區別?
- 26. Copy與Clone有什麼區別?
- 27. 錯誤與異常有什麼區別?
- 28. Tableau與Pentaho:有什麼區別?
- 29. process.cwd()與__dirname有什麼區別?
- 30. DesiredCapabilities與RequiredCapabilities之間有什麼區別?
我已經檢查過EAI網站,但多次閱讀,並且對這兩個概念並不清楚。也讀了一本書,但它仍然不夠清楚(在我的腦海中)。它們都是端點(如你所提到的那樣,它包裝了一個spring bean,將服務與消息傳遞系統分開),而另一個暴露了服務接口。到目前爲止,我發現的是,可以生成一個回覆(服務激活器),而另一個人可以管理回覆(網關),就像在等待或退出時一樣。那是對的嗎?這是主要的區別還是更多呢? – Belun 2012-04-30 07:38:20
讓我們來談談Spring Integration對模式的實現。一個 接收一個消息並調用一個方法,通常使用一個方法參數作爲消息的有效載荷;如果方法返回void,則方法返回時沒有更多操作。如果它返回一些對象,它將成爲新的消息有效載荷,並將消息發送到輸出通道。在Spring Integration中,有兩種類型的網關。消息傳遞網關是一個允許Java應用程序調用消息流的實現;該參數通常成爲有效載荷。 –
2012-04-30 11:55:55
您只需定義一個接口,然後Spring Integration將該實現構建爲消息處理參數。 第二種類型的網關用於連接到其他系統 - 有入站和出站網關。入站網關用於使用某種技術(JMS,HTTP等)公開消息系統。出站網關用於通過某種技術(JMS,HTTP等)公開某些服務的系統發送和接收。有很多這些類型的網關(twitter,TCP,FTP等等) – 2012-04-30 11:59:22