NServiceBus-进阶
在本教程中我们将创建一个非常简单的订购系统,将从客户机向服务器发送消息。订单系统包括三个项目:客户端、服务器和消息,来完成这个任务,我们将执行以下步骤:
创建客户端项目
让我们首先创建一个 Client
项目将发送订单请求NServiceBus端点。
以管理员身份打开Visual Studio,创建一个新的类库的项目名称 Ordering.Client
,名字的解决方案 Ordering
.
我们现在需要添加引用NServiceBus总成和最快的和最容易的方式是使用NuGet包管理器控制台。
打开NuGet包管理器控制台: Tools > NuGet Package Manager > Package Manager Console
.
在包管理器控制台键入以下命令:
PM> Install-Package NServiceBus.Host
当提示重新加载项目,点击重新加载。阅读更多关于Nuget处理依赖关系,并确保该项目是更新到最新版本的NServiceBus核心,阅读保持更新NuGet
包安装过程增加了NServiceBus程序集的引用和创建几个锅炉模板文件在客户端项目。
例如, EndpointConfig.cs
用于配置项目的端点。
改变配置 Client
,打开 EndpointConfig.cs
文件只是为您创建和添加 AsA_Client
如图所示:
public class EndpointConfig : IConfigureThisEndpoint, AsA_Client
您将添加更多的代码以后客户的项目,但现在我们要集中精力处理我们的订单请求的区域。
创建项目的消息
首先让我们添加一个新的类库项目,称之为“Ordering.Messages”。
项目是容器的消息的消息定义。这个项目将会在客户端和服务器之间共享,双方同意类型化消息描述。
安装 NServiceBus
NuGet包这个新项目:
包管理器控制台,类型:
PM> Install-Package NServiceBus -ProjectName Ordering.Messages
版本4。x,安装 NServiceBus.Interfaces
包中。版本5. x, NServiceBus.Interfaces
包已经被弃用。
添加一个命令和属性举行产品名称:
删除 Class1.cs
并添加一个类和名称 PlaceOrder.cs
(或者,如果您希望您可以重命名文件 PlaceOrder.cs
).
实现在PlaceOrder命令 PlaceOrder.cs
.
替换的内容 PlaceOrder.cs
用下面的代码:
namespace Ordering.Messages
{
using System;
using NServiceBus;
public class PlaceOrder : ICommand
{
public Guid Id { get; set; }
public string Product { get; set; }
}
}
创建服务器项目
现在您已经准备好创建订单处理服务器。添加一个新的类库项目,命名为“Ordering.Server”。
安装 NServiceBus.Host
NuGet包这个新项目:
包管理器控制台,类型:
PM> Install-Package NServiceBus.Host -ProjectName Ordering.Server
当提示重新加载项目,点击重新加载。阅读更多关于Nuget处理依赖关系,并确保该项目是更新到最新版本的NServiceBus核心,阅读保持更新NuGet
服务器端来理解和解释消息的内容,添加��个引用 Messages
项目前面创建:
右键单击引用 Ordering.Server
项目- >添加- > Ordering.Messages参考。
重命名 Class1.cs
来 PlaceOrderHandler.cs
用以下代码替换的内容:
namespace Ordering.Server
{
using System;
using Messages;
using NServiceBus;
public class PlaceOrderHandler : IHandleMessages<PlaceOrder>
{
IBus bus;
public PlaceOrderHandler(IBus bus)
{
this.bus = bus;
}
public void Handle(PlaceOrder message)
{
Console.WriteLine(@"Order for Product:{0} placed with id: {1}", message.Product, message.Id);
// throw new Exception("Uh oh - something went wrong....");
Console.WriteLine(@"Publishing: OrderPlaceed for Order Id: {0}", message.Id);
var orderPlaced = new OrderPlaced
{
OrderId = message.Id
};
bus.Publish(orderPlaced);
}
}
}
发送订单
我们差不多了,剩下要做的就是回到 Client
将一个引用添加到项目 Ordering.Messages
项目和复制并粘贴以下代码Class1.cs
(如果你想要你可以重命名的文件 SendOrder.cs
)文件:
namespace Ordering.Client
{
using System;
using Messages;
using NServiceBus;
public class SendOrder : IWantToRunWhenBusStartsAndStops
{
IBus bus;
public SendOrder(IBus bus)
{
this.bus = bus;
}
public void Start()
{
Console.WriteLine("Press 'Enter' to send a message.To exit, Ctrl + C");
while (Console.ReadLine() != null)
{
var id = Guid.NewGuid();
var placeOrder = new PlaceOrder
{
Product = "New shoes",
Id = id
};
bus.Send("Ordering.Server", placeOrder);
Console.WriteLine("Send a new PlaceOrder message with id: {0}", id.ToString("N"));
}
}
public void Stop()
{
}
}
}
选择一个持久性存储
在这一点上,如果你尝试编译解决方案,应该有两个错误 EndpointConfig.cs
为Ordering.Client` and the
秩序。服务器的项目。您将看到编译器抱怨这行代码在两个项目:
configuration.UsePersistence<PLEASE_SELECT_ONE>();
如果您使用的是版本的NServiceBus前5。x,你不会看到这个错误,并跳到下一节。
从NServiceBus版本5开始,它是强制性的持久性。最快的方法解决���个为了这个演示来取代 PLEASE_SELECT_ONE
与InMemoryPersistence
如下所示:
configuration.UsePersistence<InMemoryPersistence>();
NServiceBus需要持久性存储处理订阅,传奇,超时,重复数据删除,等等。InMemoryPersistence很好对于这个简单的示例,但它不是用于生产使用。请阅读坚持NServiceBus为更多的信息关于如何选择一个持久性存储和安装正确的依赖关系。
运行解决方案
你完成了编码的例子和现在运行的解决方案。
看到完整的系统,运行客户端和服务器的项目:
运行 Client
和 Server
项目在一起所以你可以看到这一切工作,右键单击 Ordering
解决方案并选择“设置启动项目…”
在屏幕上选择并设置多个启动项目 Ordering.Client
和 Ordering.Server
行动是“开始”。
最后按“F5”运行的解决方案。
两个控制台应用程序窗口应该启动
回车(在客户端控制台集中),您应该看到的订单产品:新鞋放置在其中之一。
NServiceBus-进阶的更多相关文章
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- nodejs进阶(4)—读取图片到页面
我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...
- JavaScript进阶之路(一)初学者的开始
一:写在前面的问题和话 一个javascript初学者的进阶之路! 背景:3年后端(ASP.NET)工作经验,javascript水平一般般,前端水平一般般.学习资料:犀牛书. 如有误导,或者错误的地 ...
- nodejs进阶(3)—路由处理
1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...
- nodejs进阶(5)—接收请求参数
1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...
- nodejs进阶(1)—输出hello world
下面将带领大家一步步学习nodejs,知道怎么使用nodejs搭建服务器,响应get/post请求,连接数据库等. 搭建服务器页面输出hello world var http = require ...
- [C#] 进阶 - LINQ 标准查询操作概述
LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...
- Java 进阶 hello world! - 中级程序员之路
Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...
- C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解
前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解 ...
- 【腾讯优测干货分享】如何降低App的待机内存(四)——进阶:内存原理
本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/3FTPFvZRqyAQnU047kmWJQ 1.4进阶:内存原理 在 ...
随机推荐
- asp天猫自主发码的请求
这几天在做天猫自主发码.实现了通知和核销部门.其他的部分待后续实现. 值得注意的是consume回调中,要加入sign_method=md5
- 如何配置LCD背光和LED,调试方法
LCD背光和LED配置文件 alps/custom/<proj name>lk/cust_leds.c alps/custom/<proj name>/kernel/leds/ ...
- 第二篇 顾问实施ERP与医生看病过程类比
我从08年开始涉足企业信息化咨询行业.当时做的第一个项目是汕头某黄金珠宝公司的SAP ERP业务优化项目.我在项目上担任顾问助理的角色.我们公司的老板据说是以前ORACLE公司华南区的总监,后来是格兰 ...
- cdoj 1342 郭大侠与甲铁城 树状数组+离线
郭大侠与甲铁城 Time Limit: 1500/800MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- Oracle数据库之二
SELECT查询 函数分为: 单行函数 -- 一条记录进入,一条记录输出 多行函数(分组函数)-- 多条记录进入,按组输出 单行函数: select id,first_name,nvl(commiss ...
- 使用jQuery插件PrintArea进行html页面打印
在开发系统时,我们一般会有统计分析的功能需求,而现在大多数系统都是使用B/S的形式开发. 所以,html报表打印,并且打印指定内容,成了必要的功能. 开源地址:https://github.com/R ...
- jQuery 动画 _animate() 方法
一.jQuery animate() 方法用于创建自定义动画. 必需的 params 参数定义形成动画的 CSS 属性. 可选的 speed 参数规定效果的时长.它可以取以下值:"slow& ...
- MoreLinq和Linq
MoreLinq里的Batch和Partition不知道什么区别. var ints =Enumerable.Range(1,10); var result = ints.Batch(3); var ...
- 嵌入式ARM系统开发基础
从.net到delplhi 从windows到Linxu 未来有多远? 如何突破自己? 什么是自己? 我从哪里来,要到哪里去? 世界是什么? 是世选择了我,还是我选择了世界? 怎么才能够完成蜕变? 去 ...
- Jqgrid入门-Jqgrid分组的实现(八)
上一章主要说明了如果实现Jqgrid列数据拖动,这一章主要讨论在Jqgrid中如何实现分组功能. 类似于Sql语句的Group By,Jqgrid提供了属性实现数据分组,这样表现数据会 ...