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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Shuttle ESB实现消息推送

發(fā)布時間:2025/7/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shuttle ESB实现消息推送 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ??ESB全稱Enterprise Service Bus,即企業(yè)服務(wù)總線。它是傳統(tǒng)中間件技術(shù)與XML、Web服務(wù)等技術(shù)結(jié)合的產(chǎn)物。

?ESB的出現(xiàn)改變了傳統(tǒng)的軟件架構(gòu),能夠提供比傳統(tǒng)中間件產(chǎn)品更為便宜的解決方式。同一時候它還能夠消除不同應(yīng)用之間的技術(shù)差異,讓不同的應(yīng)用server協(xié)調(diào)運作,實現(xiàn)了不同服務(wù)之間的通信與整合。

? 看吧,ESB的功能是如此強大。

在java中經(jīng)常使用的是Mule ESB。而到了.Net,Shuttle ESB作為一種新生的ESB正在慢慢的被人們所接受。以下通過一個實例解說Shuttle ESB的創(chuàng)建過程及推送原理。

? 1.我們須要引入Shuttle ESB相關(guān)的類庫-Shuttle.Core.Data、Shuttle.Core.Domain、Shuttle.Core.Host、Shuttle.Core.Infranstructure、Shuttle.ESB.Core、Shuttle.ESB.Msmq、Shuttle.ESB.SqlServer。為了保證版本號統(tǒng)一,我們能夠在VS中安裝NuGet插件下載Shuttle ESB須要的類庫;

? 2.在Pub端加入Shuttle ESB配置文件app.config,Shuttle ESB通過配置文件讀取數(shù)據(jù)庫內(nèi)容。獲得須要推送數(shù)據(jù)的Sub端工作隊列Uri及Sub端能夠接受的消息類型,配置內(nèi)容例如以下:

<?xml version="1.0"?> <configuration><configSections><section name="serviceBus" type="Shuttle.ESB.Core.ServiceBusSection, Shuttle.ESB.Core"/><section name="sqlServer" type="Shuttle.ESB.SqlServer.SqlServerSection, Shuttle.ESB.SqlServer"/></configSections><appSettings><add key="SubscriptionManagerSecured" value="false"/></appSettings><connectionStrings><clear/><add name="SubscriptionConnection" connectionString="Uid=sa;Pwd=123456;Initial Catalog=shuttle;Data Source=172.22.51.180;Connect Timeout=900" providerName="System.Data.SqlClient"/></connectionStrings><sqlServer subscriptionManagerConnectionStringName="SubscriptionConnection"/> <serviceBus><inboxworkQueueUri="msmq://./pubsub-publish-inbox-work"deferredQueueUri="msmq://./pubsub-publish-inbox-deferred"errorQueueUri="msmq://./shuttle-pubsub-error"/></serviceBus> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> </configuration>? ? ? ??3.在Pub端啟一個Bus。用于推送數(shù)據(jù): //連接數(shù)據(jù)庫new ConnectionStringService().Approve();//配置信息subscriptionManager = SubscriptionManager.Default();//創(chuàng)建 消息通道bus = ServiceBus.Create(c => c.SubscriptionManager(subscriptionManager)).Start();Console.WriteLine();ColoredConsole.WriteLine(ConsoleColor.Green, "Server bus started. Press CTRL+C to stop.");? ? ? ? ?Bus創(chuàng)建完畢后。通過bus.Publish方法完畢向Sub端的消息推送。

? 4.在Sub端加入Shuttle ESB配置文件app.config,Shuttle ESB通過配置文件向數(shù)據(jù)庫寫入當(dāng)前Sub端能夠接收的消息類型及當(dāng)前工作隊列的Uri。

Pub端通過Sub端寫入到數(shù)據(jù)庫的消息類型和工作隊列Uri推斷是否向某一Sub端發(fā)送某種類型的數(shù)據(jù),Sub端的配置文件例如以下:

<?xml version="1.0"?

> <configuration> <configSections> <section name="serviceBus" type="Shuttle.ESB.Core.ServiceBusSection, Shuttle.ESB.Core"/> </configSections> <connectionStrings> <clear/> <add name="Subscription" connectionString="Uid=sa;Pwd=123456;Initial Catalog=shuttle;Data Source=172.22.51.180;Connect Timeout=900" providerName="System.Data.SqlClient"/> </connectionStrings> <serviceBus> <inbox workQueueUri="msmq://./pubsub-subscriber1-inbox-work" errorQueueUri="msmq://./shuttle-pubsub-error"/> </serviceBus> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> </configuration>

? ? 5.在Sub端啟一個Bus用于接收Pub端推送的數(shù)據(jù)。 //連接數(shù)據(jù)庫new ConnectionStringService().Approve();//配置信息subscriptionManager = SubscriptionManager.Default();/** 配置接收消息的類型:* 風(fēng)報警解除、雨報警解除、雪報警解除、異物報警解除、地震報警解除* * 遠程實驗三個實體*/subscriptionManager.Subscribe(new[] { typeof(WindInfoAlarmEntity).FullName, typeof(RainInfoAlarmEntity).FullName, typeof(SnowInfoAlarmEntity).FullName,typeof(FreignMatterAlarmEntity).FullName,typeof(EarthquakeAlarmEntity).FullName,typeof(String).FullName});//創(chuàng)建 消息通道bus = ServiceBus.Create(c => c.SubscriptionManager(subscriptionManager)).Start();Console.WriteLine();ColoredConsole.WriteLine(ConsoleColor.Green, "Server bus started. Press CTRL+C to stop.");? ? ? ??在Bus中說明,當(dāng)前Sub端能夠處理的數(shù)據(jù)類型,比方WindInfoAlarmEntity類型、String類型。

? 6.在Sub端建立相應(yīng)的handler,通過泛型限制接收不同類型的數(shù)據(jù)推送。處理String類型的handler例如以下:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using Shuttle.ESB.Core; using Shuttle.Core.Infrastructure; using ICT.MainFramework.ViewEntity; using ICT.RCS.Server.ESB; namespace PublishSubscribe.Subscriber1 {public class WindRainSnowStrHandler : IMessageHandler<String>{public void ProcessMessage(HandlerContext<String> context){string strType = context.Message.Split('#')[0].ToString();//ESB接收處理消息MessageTransfer.transferDataToEntity(MainServerForm.bus, context.Message);}public bool IsReusable{get { return true; }}} } ? ? ? ? ?為了解決離線數(shù)據(jù)推送。Shuttle ESB用MSMQ作為消息隊列。將待處理的消息緩存到MSMQ中。
? 到此Shuttle ESB的Pub端和Sub端創(chuàng)建完成,執(zhí)行效果為Pub端通過bus公布一個消息后,局域網(wǎng)內(nèi)已經(jīng)在數(shù)據(jù)庫的工作隊列Uri中注冊過,且符合對應(yīng)消息類型的Sub端均能夠接收到Pub端公布的消息,觀察者模式的完美運用。

? Shuttle ESB的原理明確了。Mule ESB、JBoss ESB也就一看就懂。

? 希望我的解說能幫助大家進一步認識Shuttle ESB。 ?

總結(jié)

以上是生活随笔為你收集整理的Shuttle ESB实现消息推送的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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