具有Infinispan的聚集幂等消费者模式
我創建了一個小項目 ,該項目展示了如何將JBoss Infinispan與Apache Camel和冪等消費者模式一起使用,以確保消息不會在集群環境中被處理兩次。
假設您有一個應用程序,該應用程序必須通過將其部署在多個容器上才能輕松擴展。 但是應用程序必須在整個集群中僅處理一次唯一請求。 解決方案很簡單:將Camel中的冪等消費者模式與易于擴展的存儲庫一起使用。 這就是Infinispan發揮作用的地方。 Infinispan具有極高的可擴展性,高度可用的鍵/值存儲和數據網格。 如果將InfinispanIdempotentRepository與冪等的使用者一起使用,它將創建一個內存中的高速緩存來存儲請求,并且在您啟動該應用程序的另一個實例時,高速緩存實例將同步,并且所有應用程序中的冪等的使用者將不會處理現有的請求。不再。
通過此項目 (冪等的消費者demo5),您可以啟動任意數量的容器,每個容器將從8080(http:// localhost:8080 / idempotent / KEY)開始在新端口上啟動剩余端點,如果執行帶有密鑰的GET請求,對其他任何容器具有相同密鑰的后續請求將被拒絕。 在后臺,Infinispan將在整個Camel應用程序集群中復制所有已處理的密鑰,并確保一致性。
該應用程序的核心是以下路由定義,該路由定義為該應用程序的每個實例查找一個新的空閑端口號:
public class IdempotentRoute extends RouteBuilder {private static final transient Logger LOGGER = LoggerFactory.getLogger(IdempotentRoute.class);private InfinispanIdempotentRepository infinispanRepo;private int port;@Overridepublic void configure() throws Exception {from("restlet:http://localhost:" + port + "/idempotent/{key}?restletMethods=GET").idempotentConsumer(header("key"), infinispanRepo).setBody(simple("UNIQUE REQUEST ACCEPTED: ${header.key}")).stop().end().setBody(simple("REQUEST REJECTED: ${header.key}"));}public InfinispanIdempotentRepository getInfinispanRepo() {return infinispanRepo;}public void setInfinispanRepo(InfinispanIdempotentRepository infinispanRepo) {this.infinispanRepo = infinispanRepo;}public void start() {port = AvailablePortFinder.getNextAvailable(8080);LOGGER.info("Using port: " + port);} }很簡單,不是嗎。
翻譯自: https://www.javacodegeeks.com/2014/08/clustered-idempotent-consumer-pattern-with-infinispan.html
總結
以上是生活随笔為你收集整理的具有Infinispan的聚集幂等消费者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java并发教程–原子性和竞争条件
- 下一篇: 九方皋怎么读 九方皋的读音