1. 程式人生 > >MassTransit 實現應用程式間互動

MassTransit 實現應用程式間互動

MassTransit 介紹 

先看下masstransit 官網介紹:MassTransit 是一個自由、開源、輕量級的訊息匯流排, 用於使用. NET 框架建立分散式應用程式。MassTransit 在現有訊息傳輸提供了一組廣泛的功能, 從而使開發人員能夠友好地使用基於訊息的會話模式非同步連線服務。基於訊息的通訊是實現面向服務的體系結構的可靠和可擴充套件的方式。前段時間看eshop文件,在微服務之間實現基於事件的通訊章節。有提到MassTransit是實現event Bus技術之一,於是就翻譯了幾篇

下面利用MassTransit實現

eshop中的一個簡單例項(前提你剛好了解eshop中的這個場景): Catelog微服務中產品價格更改,Basket微服務通知購車價格變動

 

如果沒看原始碼,這個場景也很常見很好理解,我們在接下來建立兩個webapi站點和一個類庫來演示如何實現上述場景

在類庫中定義產品價格變動訊息

 public interface IProductPriceChanged
    {
        int ProductId { get; set; }

        decimal NewPrice { get; set; }

        decimal OldPrice { get
; set; } }

MassTransit.Catalog站點 

引入一下包:MassTransit、MassTransit.RabbitMQ、Autofac.Extensions.DependencyInjection。在Startup類ConfigureServices中新增:

 builder.Register(c =>
            {
                return Bus.Factory.CreateUsingRabbitMq(cfg =>
                {
                    cfg.Host(
new Uri($"rabbitmq://{Configuration["HostName"]}"), h => { h.Username(Configuration["UserName"]); h.Password(Configuration["Password"]); }); }); }) .As<IBusControl>() .As<IBus>() .As<IPublishEndpoint>() .SingleInstance(); builder.Populate(services); container = builder.Build(); return new AutofacServiceProvider(container);

然後在Configure方法新增:  

var bus = container.Resolve<IBusControl>();
var busHandle = TaskUtil.Await(() => bus.StartAsync());
 lifetime.ApplicationStopping.Register(() => busHandle.Stop());

最後在Controller新增模擬修改價格的介面

 private readonly IBus _bus;
        public ValuesController(IBus bus)
        {
            _bus = bus;
        }
        // GET api/values
        [HttpGet]
        public async Task<IEnumerable<string>> GetAsync()
        {
            await _bus.Publish<IProductPriceChanged>(new
            {
                ProductId=100,
                NewPrice=1999,
                OldPrice=2000,
            });
            return new string[] { "價格更改" };
        }

到此釋出端已經完成了 

MassTransit.Basket站點

同樣引入包,並在Configure方法中新增訂閱的程式碼   

var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
            {
                var host = sbc.Host(new Uri($"rabbitmq://{Configuration["RabbitMQ:HostName"]}"), h =>
                {
                    h.Username(Configuration["RabbitMQ:UserName"]);
                    h.Password(Configuration["RabbitMQ:Password"]);
                });
                sbc.ReceiveEndpoint(host, "ProductPriceChangedQueue", e =>
                {
                    e.Consumer<ProductPriceChangedConsumer>();
                });

            });
            // start/stop the bus with the web application
            applicationLifetime.ApplicationStarted.Register(bus.Start);
            applicationLifetime.ApplicationStopped.Register(bus.Stop);

消費端 你可以使用其他方式寄宿比如控制檯等;

最後執行兩個站點看下輸出

相關推薦

MassTransit 實現應用程式互動

MassTransit 介紹  先看下masstransit 官網介紹:MassTransit 是一個自由、開源、輕量級的訊息匯流排, 用於使用. NET 框架建立分散式應用程式。MassTransit 在現有訊息傳輸上提供了一組廣泛的功能, 從而使開發人員能夠友好地使用基於訊息的會話模式非同步連線服務。基

C# FrameworkAPI之Mutex實現應用程式單例

using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace DemoCSDN {

Oracle Database 12c DBA文官手冊(第8版)——第5章 開發和實現應用程式(續)

5.2、資源管理5.2.1、實現資料庫資源管理需要建立資源計劃、資源消費者組和資源計劃指令。使用資源管理器命令前須建立“未決區域”。針對會話啟用ADMINISTRATOR_RESOURCE_MAANAGER系統許可權將使用者賦給資源消費者組建立資源計劃指令分配相關資源1 切換消費者組2 使用SQL配置檔案5.

Oracle Database 12c DBA文官手冊(第8版)——第5章 開發和實現應用程式

1 調整設計:最佳實踐         1.1做盡可能 少的工作             應該簡化應用

利用Redis實現應用程式主備

需要實現主備的每個任務都先進行爭奪主機,通過爭奪redis中的key值。Rredis需要搭建主備高可用。 搶到key值的程式為主機,可以開始任務,備機執行緒開始等待,過段時間再進行爭奪主機。一般情況下首先搶到key值的主機會一直執行任務直到主機異常,程式崩潰等錯誤發生時,備

使用LogMaster4Net實現應用程式日誌的集中管理

日誌在軟體系統中的重要性我在此也不贅述了,幾乎所有程式設計師每天都會更日誌打交道。 那麼你是否曾今為這樣的一些事情而困擾過: - 遠端登入到不同的伺服器,找到應用程式目然後檢視應用日誌; - 來回切換於不同伺服器並使用tail來實時監控日誌輸出資訊; - 解決在各個伺服器上各個應用日積月累生成的大量日誌

java建立快捷方式實現應用程式開機自啟

SpringBoot應用中在啟動的時候讓應用在啟動的時候,在windows系統中的啟動目錄下建立快捷方式,在系統啟動的時候啟動指定應用。這裡使用jshortcut來實現。 可以下載下來自己打jar包,然後用VS編譯一下src/jni/ 目錄下的compile檔案編譯js

java實現應用程式記住使用者名稱、密碼功能

 本文介紹的記住使用者名稱、密碼功能是借用jQuery外掛方式實現。 1.      從網上下載jquery.cookie.js,拷貝到應用程式中。 2.      登入頁面(login.jsp)匯入jquery.cookie.js <script language

android 應用程式跳轉

Sending the User to Another App Android最重要的特性之一就是:一個應用可以基於不同的 action,把使用者推送到其他應用中去。比如說,如果你想在你的應用中顯示一張帶有商店地址的地圖,你並不需要在自己的應用中去實現一個顯示地圖的Act

用VC++實現應用程式視窗的任意分割(2)

一、關於CSplitterWnd類 我們在使用CuteFtp或者NetAnt等工具的時候,一般都會被其複雜的介面所吸引,在這些介面中視窗被分割為若干的區域,真正做到了視窗的任意分割。那麼我們自己如何建立類似的介面,也實現視窗的任意的分割呢?在VC6.0中這就需要使用到CSplitterWnd類。CSplitt

PC使用Proxifier設定ss實現應用程式級別代理(測試有效)

首先確保你的PC按照這篇文章設定ss併成功爬牆,然後確保ss處於全域性模式 什麼是Proxifier Proxifier是一款功能非常強大的socks5客戶端,可以讓不支援通過代理伺服器工作的網路程式能通過HTTPS或SOCKS代理或代理鏈。支援 64位系統,支援Xp,V

微信小程式實現與後臺PHP互動

微信小程式實現與後臺PHP互動 接下來將講後臺如何與前臺進行資料及圖片之間的互動,相信這一點是很多人所關注的,因為當時我實在團隊中負責後臺開發,因此對前端不是特別瞭解,這裡我會貼出前端開發時的部分程式碼截圖,微信小程式的官方api介紹地址是:   https://mp.weix

應用程序實現對其他應用程式的呼叫

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android ContentProvider實現兩個程式資料共享demo

1、客戶端程式碼: 先實現服務端 SQL建立: public class DBHelper extends SQLiteOpenHelper { // 資料庫名 private static final String DATABASE_NAME = "finch.db"

《Java》Java實現一個“計算文字中某個詞出現頻率”的應用程式

一、目的     計算某個詞出現頻率,可以很好的對一篇文章水平的評價提供客觀依據,比如在技術類文章中出現“的”字的頻率太高,說明此文章邏輯不夠嚴謹,本次應用程式的目的就是計算出指定文字中指定詞出現的頻率。   二、程式演示 有如下一個文字檔案w.txt,我們計算“的”字出

記憶體池的設計和實現 -- C++應用程式效能優化

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

ArcEngine10.2設計與開發課程學習(作業二)——基本應用程式生成,右擊選單實現:顯示、移除和開啟屬性表功能

前言:這裡是我的筆記本 目錄: 準備工作——工具方法等 程式碼   首先說明一下第一個作業,這是第二個的連結:https://pan.baidu.com/s/1NziPHoMEJx0vc8DCNrX-dA提取碼:qpee 看的時候希望能夠靜下心來看,不要著急

應用程式通過WebSocket自行推送業務訊息給Subscriber的實現

首先是使用 Spring Boot 構建包含 WebSocket 的工程。然後定義一個 Java-Config 的 WebSocket :  @Configuration @EnableWebSocketMessageBroker public class WebSocket

React Native實現再按一次退出應用程式功能

解決點選兩次手機back鍵退出程式 程式碼及註釋如下: //雙擊返回鍵退出程式

利用Intent隱式跳轉,實現手動選擇開啟符合條件的應用程式

先看實現效果: 實現如上圖一樣的效果,可以手動選擇開啟手機上符合條件的應用程式,用於程式中的一些功能,比如程式中分享功能,將手機上符合分享條件的所有程式彈出來供使用人手動選擇;再比如手機白名單的實現! 實現原理:使用Intent的隱示意圖跳轉實現,具體程式碼如下 A