- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 NEventStore 时如何集成到 NServiceBus?
我是 NSB ans ES 的新手,并试图在使用 ES 和 CQRS 时找出 NSB 的最佳设置。
我以与示例中的 DispatchCommit 相同的方式连接到 NSB,
https://github.com/joliver/EventStore/blob/master/doc/EventStore.Example/MainProgram.cs
最佳答案
这是我在生产中使用的:
public sealed class NServiceBusPublisher : IPublishMessages
{
private const string AggregateIdKey = "AggregateId";
private const string CommitVersionKey = "CommitVersion";
private const string EventVersionKey = "EventVersion";
private const string BusPrefixKey = "Bus.";
private readonly IBus bus;
public NServiceBusPublisher(IBus bus)
{
this.bus = bus;
}
public void Dispose()
{
GC.SuppressFinalize(this);
}
public void Publish(Commit commit)
{
for (var i = 0; i < commit.Events.Count; i++)
{
var eventMessage = commit.Events[i];
var busMessage = eventMessage.Body as IMessage;
AppendHeaders(busMessage, commit.Headers); // optional
AppendHeaders(busMessage, eventMessage.Headers); // optional
AppendVersion(commit, i); // optional
this.bus.Publish(busMessage);
}
}
private static void AppendHeaders(IMessage message, IEnumerable<KeyValuePair<string, object>> headers)
{
headers = headers.Where(x => x.Key.StartsWith(BusPrefixKey));
foreach (var header in headers)
{
var key = header.Key.Substring(BusPrefixKey.Length);
var value = (header.Value ?? string.Empty).ToString();
message.SetHeader(key, value);
}
}
private static void AppendVersion(Commit commit, int index)
{
var busMessage = commit.Events[index].Body as IMessage;
busMessage.SetHeader(AggregateIdKey, commit.StreamId.ToString());
busMessage.SetHeader(CommitVersionKey, commit.StreamRevision.ToString());
busMessage.SetHeader(EventVersionKey, GetSpecificEventVersion(commit, index).ToString());
}
private static int GetSpecificEventVersion(Commit commit, int index)
{
// e.g. (StreamRevision: 120) - (5 events) + 1 + (index @ 4: the last index) = event version: 120
return commit.StreamRevision - commit.Events.Count + 1 + index;
}
}
关于nservicebus - NEventStore NServiceBus 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5564130/
current advice on handling exceptions in NServiceBus是使用内置的设施。错误消息进入错误消息队列,并将日志写入磁盘。 但是,如果我想将我的错误发送到
我们正试图找出用于我们的 NServiceBus 服务的最佳线程数。我们在一台有 2 个四核的机器上运行它。我们在队列备份方面遇到了问题。我们从 100 个线程开始,然后增加到 200 个,事情变得更
我有一个现有的 NServiceBus 2.6 应用程序,我想开始迁移到 3.0。我正在寻找第一个实例的最小更改升级。这就像用 3.0 Nuget 包替换 2.6 DLL 一样简单,还是有其他考虑?
是否可以在 NServiceBus 版本 3.2.2 中禁用重试? 使用以下配置,可以禁用重试: 但当线程数设置为 20 时则不会。在这种情况下,消息会重试两次: 这看起来很像
NServiceBus 的“重试”系统很棒。它在确保像死锁这样的小事情不会把我们搞砸方面非常有效。 但是,有时我知道一条消息是不好的。从某种意义上说,再多的重试也无济于事。 有没有办法告诉 NServ
使用 NEventStore 时如何集成到 NServiceBus? 我是 NSB ans ES 的新手,并试图在使用 ES 和 CQRS 时找出 NSB 的最佳设置。 我以与示例中的 Dispatc
我刚刚开始使用 NServiceBus,无法弄清楚在代码中配置 MsmqTransport 时缺少什么。如果我这样配置发布者; IBus bus = Configure.With()
遵循此解释的最简单方法是 NServiceBus Pub/Sub 示例,其中包含“多态订阅”示例 (Subscriber2)。 消息:(未更改) public class EventMessage :
Udi 和 Andreas 多次提到 NServiceBus 安装的零停机升级。对 NServiceBus 安装执行零停机升级的正确方法是什么? 最佳答案 这意味着,由于 NSB 使用消息传递作为底层
我有一个场景,我需要通过一个简单的经过身份验证的 REST API 向第三方公开一堆在 NServiceBus 中创建的事件消息。第三方可能使用也可能不使用 .NET(它们甚至可能是浏览器中的 Jav
假设我使用延迟消息传递功能在将来的某个时间点发送消息,但稍后我可能想取消该消息。 问题 1 - 进行原始 bus.Defer(...) 调用时,如何为该消息取回唯一标识符?我希望有消息 ID 或某种超
背景 我们正在尝试在我们的公司中引入一种新的架构模式,并且正在考虑使用服务总线的具有事件源的 CQRS。我们目前正在开发 POC 的技术是 NServiceBus、事件存储和 MSMQ。我们希望在 N
NServiceBus 到底是 ESB 还是轻量级 ESB?还是更像具有持久/可靠消息传递的 WCF?在我看来,它更像是一个消息传递框架而不是 ESB。 只是想要一些指针,因为我刚刚开始研究不同的 E
我正在尝试将 NServiceBus 设置为使用远程错误队列来简化错误检查的管理。当我这样做时,我在 NServiceBus.Host.exe 启动时收到以下错误: 2010-03-25 07:59:
我知道这对很多人来说似乎很明显,但我的客户使用的模式我不太方便。 案例是,他们的客户通过 nservicebus 将存款或取款发送到第三方系统。第三方系统需要处理该交易,但可能需要数天,甚至数周才能完
有没有办法禁止将失败的消息发送到 NServiceBus 的错误队列? 对于一个特定的端点,我不想在二级重试失败后重试消息。相反,我将使用此处提到的 MessageSentToErrorQueue 错
我遇到了与重试相关的行为,在我尝试过的文档或搜索中找不到任何引用。基本上,如果我的处理程序处理消息的时间超过 60 秒(注意它不会引发异常),NServiceBus 会触发另一个处理程序来处理相同的消
我有一个需要以同步方式调用 nservicebus 的 Web 服务。 如何做到这一点? 最佳答案 查看 AsyncPages 示例。如果您希望它是同步的,只需阻塞直到回调完成。 希望这可以帮助! 关
我想创建一个由消息“Event1”开始的传奇,但它会忽略收到具有相同应用 ID 的“重复”开始消息(这可能是由于两个或多个用户在短时间内点击了 UI 按钮) .文档似乎表明这种方法可行: 佐贺声明 I
过去 6 个月的学习曲线充满挑战,CQRS 和 DDD 是罪魁祸首。 这很有趣,我们已经完成了项目的 1/2,而我还没有时间深入研究的领域是消息传递框架。 目前我不使用 DTC,所以有一个很好的可能性
我是一名优秀的程序员,十分优秀!