MassTransit 实现应用程序间交互

简介: MassTransit 介绍  先看下masstransit 官网介绍:MassTransit 是一个自由、开源、轻量级的消息总线, 用于使用. NET 框架创建分布式应用程序。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);

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

最后运行两个站点看下输出

 

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
【Xamarin】使用WebSocket开发实时通信应用程序
WebSockets是一种双向通信协议,或TCP连接上的持久通信通道,由许多游戏,具有聊天功能的应用程序和实时应用程序(如股票行情)利用的非常强大的协议。 在这篇博文中,我们将讨论如何构建一个简单的Xamarin聊天室应用程序,该应用程序将利用并连接到ASP.NET Core WebSocket服务。
3238 0
|
4月前
|
iOS开发 开发者 UED
探索iOS开发中的SwiftUI框架:构建现代应用程序的桥梁
本文深入探讨了SwiftUI框架在iOS开发中的应用,揭示了其对提升开发效率和改善用户体验的重要性。通过分析SwiftUI的设计哲学、核心组件以及与旧有开发模式的比较,文章旨在为读者提供关于如何利用SwiftUI构建现代化应用程序的实用指南。
|
5月前
|
Web App开发 JSON JavaScript
Chrome 插件各模块之间的消息传递
Chrome 插件各模块之间的消息传递 一、消息传递 1. 消息传递分类 Chrome 插件的 Action、Background 和 content_script 三个模块之间的信息传输 插件和插件之间的信息传输 网页向插件进行信息传输 与原生应用进行消息传递
173 0
|
6月前
|
Java
JavaFX是一个用于构建富客户端应用程序的平台
【5月更文挑战第1天】JavaFX库可用于在Java中绘制K线图。以下是一个简单的示例,展示如何创建并显示一个基本的K线图。代码首先创建OHLCChart,设置标题和坐标轴,然后创建数据集并添加数据点,最后将数据集和图表显示在场景中。要自定义图表外观,可探索JavaFX库的更多功能和文档。
39 0
|
6月前
|
JSON 小程序 JavaScript
【微信小程序】-- 宿主环境 & 通信模型 & 运行机制介绍(五)
【微信小程序】-- 宿主环境 & 通信模型 & 运行机制介绍(五)
|
JSON 小程序 JavaScript
【微信小程序】宿主环境 通信模型 运行机制 组件
🍓小程序的宿主环境 - 宿主环境简介 1. 什么是宿主环境 2. 小程序的宿主环境 3. 小程序宿主环境包含的内容 🍍小程序的宿主环境 - 通信模型 1. 通信的主体 2. 小程序的通信模型 🥦小程序的宿主环境 - 运行机制 🍒小程序的宿主环境 - 组件 1. 小程序中组件的分类 2. 常用的视图容器类组件 3. view 组件的基本使用
|
Web App开发 JavaScript 前端开发
常见的Web实时消息交互方式和SignalR
原文:常见的Web实时消息交互方式和SignalR 标签: WebSocket SignalR 前言 1. Web消息交互技术 1.1 常见技术 1.2 WebSocket介绍 1.3 WebSocket示例 2.
2070 0
|
存储 开发者 设计模式
|
图形学
Unity UnityWebRequest实现与后端的交互
一般我们与后端对接的时候会用到UnityWebRequest这里简单使用这个与后端进行交互这个是总类 using UnityEngine;using System.Collections;using System.
3239 0