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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用Infinispan进行Camel的事务性缓存

發(fā)布時(shí)間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Infinispan进行Camel的事务性缓存 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

不久前,我為Camel 創(chuàng)建了Redis連接器。 Redis是很棒的鍵值存儲(chǔ)(還有更多),但是隨后我需要一個(gè)在與Camel相同的JVM中運(yùn)行的緩存,并注意到Infinispan已切換到ASL v2 。 Camel中已經(jīng)有其他用于在JVM上進(jìn)行緩存的連接器,例如Hazelcast和EHCache,但是如果您已經(jīng)將Camel用作其他Red Hat產(chǎn)品的一部分,或者想了解LIRS驅(qū)逐如何勝過(guò)LRU,那么Infinispan值得嘗試。

簡(jiǎn)而言之,Infinispan是事務(wù)性內(nèi)存鍵值存儲(chǔ)和數(shù)據(jù)網(wǎng)格。 在嵌入式模式下使用時(shí),Infinispan與Camel駐留在同一JVM中,并允許Camel使用者接收緩存更改通知:

<route><from uri="infinispan://localhost?cacheContainer=#cacheContainer&caseName=orders&eventTypes=CACHE_ENTRY_CREATED"/><filter><simple>${out.header.CamelInfinispanIsPre} == true</simple><to uri="log:com.mycompany.order?showHeaders=true"/></filter> </route>

在上面的示例中,當(dāng)創(chuàng)建緩存條目時(shí),Infinispan將觸發(fā)兩個(gè)事件-一個(gè)事件在創(chuàng)建緩存條目之前和之后。 也可以同步接收事件,即在處理高速緩存操作的同一線程中接收事件,或在不阻止高速緩存操作的情況下在單獨(dú)的線程中異步接收事件。

將Infinispan用作本地緩存很簡(jiǎn)單,它公開(kāi)了ConcurrentMap接口,并具有通常的到期,收回,鈍化,持久存儲(chǔ),查詢等功能。 使Infinispan成為數(shù)據(jù)網(wǎng)格的是節(jié)點(diǎn)發(fā)現(xiàn)其他節(jié)點(diǎn)以及在它們之間復(fù)制或分發(fā)數(shù)據(jù)的能力。 復(fù)制允許跨集群共享數(shù)據(jù),而分發(fā)使用一致的哈希算法來(lái)實(shí)現(xiàn)更好的可伸縮性。

在客戶端-服務(wù)器模式下,Infinispan作為獨(dú)立應(yīng)用程序運(yùn)行,并且Camel生產(chǎn)者可以使用Infinispan的Hot Rod客戶端發(fā)送消息。 Hot Rod是一種二進(jìn)制,語(yǔ)言無(wú)關(guān)的智能協(xié)議,允許以拓?fù)浣Y(jié)構(gòu)和散列分布感知方式與Infinisnap服務(wù)器進(jìn)行交互。

位于駱駝的Infinispan生產(chǎn)商目前提供GET , PUT , REMOVE和CLEAR操作。 這是生產(chǎn)者將數(shù)據(jù)放入訂單緩存的示例:

<route><from uri="direct:orderCache"/><setHeader headerName="CamelInfinispanKey"><simple>${in.header.orderId}</simple></setHeader><setHeader headerName="CamelInfinispanValue"><simple>${in.header.orderTotal}</simple></setHeader><setHeader headerName="CamelInfinispanOperation"><simple>CamelInfinispanOperationPut</simple></setHeader><to uri="infinispan://localhost?caseName=orders"/> </route>

讓我們創(chuàng)建一個(gè)更有趣的示例。 Infinispan也符合JTA規(guī)范,可以參與交易。 我們將創(chuàng)建一個(gè)用于注冊(cè)人員的REST API,該API將首先使用Camel sql組件將該人員持久保存在關(guān)系數(shù)據(jù)庫(kù)中,然后在同一事務(wù)中將firstName放入Infinispan緩存中。 我們將使用事務(wù)處理的 Camel路由來(lái)做到這一點(diǎn),因此,如果在路由過(guò)程中發(fā)生錯(cuò)誤,在任何階段,Camel都會(huì)確保回滾事務(wù)(用于緩存和數(shù)據(jù)庫(kù)),以便數(shù)據(jù)庫(kù)和緩存始終處于一致的狀態(tài)。

<route><from uri="restlet:/persons?restletMethod=POST"/><transacted/><!-- PERSIST TO DB --><to uri="sql:insert into person(firstName, lastName) values(:#firstName,:#lastName)?dataSource=#dataSource"/><!-- DAMN EXCEPTION THROWER--><filter><simple>${in.header.lastName} == "damn"</simple><throwException ref="damn"/></filter><!-- PUT TO CACHE --><to uri="sql:select id from person WHERE id = (select max(id) from person)?dataSource=#dataSource"/><setHeader headerName="personId"><simple>${body[0][ID]}</simple></setHeader><setHeader headerName="CamelInfinispanKey"><simple>${headerAs(personId, String)}</simple></setHeader><setHeader headerName="CamelInfinispanValue"><simple>${in.header.firstName}</simple></setHeader><setHeader headerName="CamelInfinispanOperation"><simple>CamelInfinispanOperationPut</simple></setHeader><to uri="infinispan://localhost?cacheContainer=#cacheContainer&caseName=orders"/> </route>

如您所見(jiàn),路由中沒(méi)有任何魔術(shù)或額外的配置,這是一條標(biāo)準(zhǔn)路由。 我們只有一小段代碼,當(dāng)該人的lastName被該死以模擬路線中間的錯(cuò)誤時(shí),將引發(fā)異常。

該應(yīng)用程序使用atomikos JTA事務(wù)管理器以獨(dú)立模式運(yùn)行。 首先,我們創(chuàng)建一個(gè)JtaTransactionManager ,以供交易路線使用:

<bean id="userTransaction" class="com.atomikos.icatch.jta.UserTransactionImp"/> <bean id="userTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"/> <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <constructor-arg ref="userTransaction"/><constructor-arg ref="userTransactionManager"/> </bean>

然后用它包裝我們的數(shù)據(jù)源 :

public AtomikosDataSourceBean atomikosDataSourceBean() throws Exception {EmbeddedXADataSource ds = new EmbeddedXADataSource();ds.setCreateDatabase("create");ds.setDatabaseName("target/testdb");ds.setUser("");ds.setPassword("");AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();xaDataSource.setXaDataSource(ds);xaDataSource.setUniqueResourceName("xaDerby");return xaDataSource; }

并使用TransactionManagerLookup告訴Infinispan參與同一筆交易:

public BasicCacheContainer basicCacheContainer() throws Throwable {GlobalConfiguration glob = new GlobalConfigurationBuilder().nonClusteredDefault().build();Configuration loc = new ConfigurationBuilder().transaction().transactionMode(TransactionMode.TRANSACTIONAL).transactionManagerLookup(new TransactionManagerLookup() {@Overridepublic TransactionManager getTransactionManager() throws Exception {return jtaTransactionManager.getTransactionManager();}}).build();return new DefaultCacheManager(glob, loc, true); }

完成所有這些樣板代碼之后,我們就有了數(shù)據(jù)源,緩存和Camel路由參與同一事務(wù)。 要查看具有兩個(gè)階段提交和回滾的完整REST示例,請(qǐng)從github獲取源代碼并進(jìn)行使用。

BTW Camel-infinispan組件仍然不是Camel主干的一部分,要運(yùn)行示例,您也將需要它 。

參考:來(lái)自O(shè)FBIZian博客的JCG合作伙伴 Bilgin Ibryam 提供的Infinispan的Camel事務(wù)緩存 。

翻譯自: https://www.javacodegeeks.com/2013/08/transactional-caching-for-camel-with-infinispan.html

總結(jié)

以上是生活随笔為你收集整理的使用Infinispan进行Camel的事务性缓存的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 性色av免费观看 | 性欧美bb | 狠狠操导航| 国产成人精品免费 | 亚洲国产第一页 | 玖玖在线播放 | 狠狠艹 | 91精品国自产在线观看 | 嫩草嫩草嫩草 | 天天噜夜夜噜 | 欧美日韩一级黄色片 | 综合色在线视频 | 91手机视频 | 欧美黄色一区二区 | 午夜伦伦电影理论片费看 | 这里只有精品22 | 国产精品一区二区三区免费观看 | 精品亚洲永久免费精品 | 婷婷激情小说 | 99视频免费在线观看 | 日本成人网址 | 全程粗话对白视频videos | 色中色av | 97色综合| 一级黄色毛毛片 | 天堂中文字幕 | 日本久久精品视频 | 国产碰碰| 日本三级一区二区 | 理论片中文字幕 | 在线精品福利 | 国产欧美一区二区精品性色 | 中国一级黄色大片 | 春日野结衣av | 吃奶av| 久久黄色av | 国产超级av | 激情自拍偷拍 | 天天操天天操天天干 | 亚洲一区a | 中国特级黄色大片 | 精品日韩av | 九九九九九九精品 | 国产区一区二区 | 天天摸日日摸狠狠添 | 亚洲激情偷拍 | 制服丝袜在线视频 | 日韩欧美中文在线 | 中文字幕+乱码+中文 | 亚洲三级黄色片 | 国产在线视频网站 | 欧美一区二区三区久久成人精品 | 最新天堂中文在线 | 亚欧三级 | 日本欧美一区二区三区不卡视频 | 被扒开腿一边憋尿一边惩罚 | 日韩在线激情视频 | 日韩素人| 永久免费国产 | 三级av免费看| 国产精品久久久久久久 | 少妇人妻一区 | 东北少妇露脸无套对白 | 张津瑜国内精品www在线 | 亚洲免费观看av | 五月婷婷综| www久久久久 | 免费日皮视频 | 爱爱免费视频网站 | 精品人妻一区二区三区三区四区 | 精品久久久久久久久久久aⅴ | 伊人青青 | 亚洲女人的天堂 | 日韩黄色片网站 | 性网站在线观看 | 欧美色乱| 久久国产精品久久久久久电车 | 91爱国产 | 色香欲综合网 | 91原视频| 国产强被迫伦姧在线观看无码 | 日本成人精品 | 国产成年人视频 | 办公室荡乳欲伦交换bd电影 | 久久国产视频播放 | 日本黄色片免费 | 国产一线二线三线女 | 粉嫩av网址| 精品少妇一区二区三区在线观看 | 中文一区在线观看 | 九草视频在线 | 欧美黄色三级 | 性工作者十日谈 | 免费欧美黄色 | 日本在线成人 | 91精品成人 | 波多野结衣在线观看视频 | 亚洲欧洲精品一区二区 | 波多野结衣电车 |