标签: nservicebus3

NServiceBus与Windows ServiceBus

有人能够揭示新发布的Windows ServiceBus(内部部署,而不是Azure)和NServiceBus之间的差异吗?

正在寻找详细解答Windows SB可能缺失的内容,因为我很熟悉NSErviceBus可以做什么:

  1. 它是真正的服务总线而不仅仅是使用队列的消息代理吗?
  2. 它可以支持消息多态吗?(消息子类化其他消息和支持此层次结构的处理程序
  3. 长时间运行的流程和关联
  4. 向外扩展

nservicebus servicebus nservicebus3

47
推荐指数
1
解决办法
1万
查看次数

包装NServiceBus.IHandleMessages

我被要求开发将作为通用总线不采取行动一层任何以NServiceBus直接引用.到目前为止,由于对不显眼的消息的支持并不是太难.除了现在我已被要求提供我们自己的IHandleMessages定义,并找到一种在连线过程中映射它的方法.所以我在想这样的事情:

    public class MessageHandlerAdapter<T> : IHandleMessages<T>
{
    IUnityContainer container;

    public MessageHandlerAdapter(IUnityContainer container)
    {
        this.container = container;
    }

    #region IMessageHandler<T> Members

    public void Handle(T message)
    {
        var handler = container.Resolve<IHandle<T>>();
        handler.Handle(message);
    }

    #endregion
}
Run Code Online (Sandbox Code Playgroud)

IHandle将成为我们自己的定义(顺便说一下,它与IHandleMessages完全相同).我希望能够反映AppDomain并找到所有实现IHandle的类并将它们注册到容器中,然后注册一个具有相同类型T的MessageHandlerAdapter.

我的问题是我已经使用NServiceBus将近2年了,我不记得在NSB管道中将这种功能挂钩到哪里.

nservicebus3

7
推荐指数
1
解决办法
1779
查看次数

在NServiceBus 3+中使用超时管理器与分发服务器的正确方法是什么?

3版之前的建议是在分发服务器旁边运行超时管理器作为群集上的独立进程.(详见此处:http://support.nservicebus.com/customer/portal/articles/965131-deploying-nservicebus-in-a-windows-failover-cluster).

在将超时管理器作为附属程序集包含之后,在与分发服务器进行扩展时使用它的正确方法是什么?

服务A的每个工作程序是否应该在启用超时管理器的情况下运行,或者只应将服务A的分发程序进程配置为运行服务A的超时管理器?

如果每个工作者都运行它,他们是否共享相同的Raven实例来存储超时?(如果是这样,你如何确保两个或多个工人同时没有获得相同的过期超时?)

nservicebus nservicebus-distributor nservicebus3

7
推荐指数
1
解决办法
2701
查看次数

与温莎城堡儿童容器的快照

阅读页面(后http://docs.particular.net/nservicebus/containers/child-containers由NServiceBus 3)关于儿童容器的支持,我期待在温莎城堡短暂的组件父容器表现得像单身儿童容器.但是,每次都会实例化子容器中这些父组件的依赖关系.

有没有办法在Castle Windsor实现父容器快照的这种行为?换句话说,容器中组件的瞬态,如果从子容器中解析,则为单例.

.net castle-windsor nservicebus3

5
推荐指数
1
解决办法
330
查看次数

使用NServiceBus处理消息时,MSMQ消耗大量内存

我有两个使用NserviceBus的Windows服务.一个将消息写入队列,另一个从中读取消息并进行一些处理.所有队列都是事务性的,NserviceBus端点配置如下.

.IsTransactional(true)
.IsolationLevel(IsolationLevel.ReadCommitted)
.MsmqTransport()
.RunTimeoutManager()
.UseInMemoryTimeoutPersister()
.MsmqSubscriptionStorage()
.DisableRavenInstall()
.JsonSerializer()
Run Code Online (Sandbox Code Playgroud)

问题是当大量消息(170,000+)排队时,MSMQ服务(mqsvc.exe)会占用相当多的内存(1.5 - 2.0 GB)并且内存不会被释放至少5 - 6小时.平均邮件大小约为5 - 10 KB.似乎排队的消息越多,它使用的内存越多.基于NServiceBus的Windows服务内存消耗在完全可接受的限制范围内(50 - 100 MB),无论处理多少消息都不会增加.

关于为什么MSMQ会使用这么多内存并且需要很长时间来发布它的任何想法?谢谢堆.

msmq nservicebus3

4
推荐指数
1
解决办法
2494
查看次数

NServiceBus依赖注入

我一直遇到这个问题.

AndreasÖhlund在这里回答了一个问题,但我一直无法使用他给出的建议来解决问题.

这是我的设置:

public abstract class CommandHandler<T> : IHandleMessages<T>, IDomainReadRepository where T : Command
{
    public IDomainRepository DomainRepository { get; set; }

    protected abstract void OnProcess(T command);

    public TAggregate GetById<TAggregate>(Guid id) where TAggregate : IEventProvider, new()
    {
        return DomainRepository.GetById<TAggregate>(id);
    }

    public void Handle(T message)
    {
        OnProcess(message);
        // Domain repository will save.
    }
}
Run Code Online (Sandbox Code Playgroud)

这个想法是特定的命令处理程序覆盖OnProcess方法并做他们的事情,然后DomainRepository将保存所有内容.

以下是我注册组件的方法:

public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
    public void Init()
    {
        Configure.With().DefiningCommandsAs(c => c.Namespace != null && c.Namespace.EndsWith("Commands"));
        Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent<DomainRepository>(DependencyLifecycle.InstancePerCall);
        Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent<EventStore.Sql.EventStore>(DependencyLifecycle.InstancePerCall);
        Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent<MongoDbObjectSecurityDescriptorRepository>(DependencyLifecycle.InstancePerCall);
        Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent<LocalTenantConfig>(DependencyLifecycle.InstancePerCall); …
Run Code Online (Sandbox Code Playgroud)

dependency-injection nservicebus nservicebus3

3
推荐指数
1
解决办法
3034
查看次数

NServiceBus稍后处理消息

我正在使用NSerivceBus构建一个系统,它应该只在特定的时间帧上将消息发送到远程处理程序.到目前为止,我设法将所有消息放在处理队列中,并从那里检查远程处理程序的可用性,如果处理程序不可用,我不会通过边界发送消息.为此,我正在使用

Bus.HandleCurrentMessageLater()
Run Code Online (Sandbox Code Playgroud)

但NSB将继续尝试.它不像其他听众会在几分钟内启动并运行,但它可能有几个小时的中断窗口,所以这不是很有效.

想知道是否有办法让总线在一段时间后重试该消息,或者在下次重试之前不要继续重试并等待一段时间.我要使用Sagas,只是简单的命令/处理程序消息.

nservicebus nservicebus3

2
推荐指数
1
解决办法
759
查看次数

在版本 3.x 中排除特定的 nservicebus 主机处理程序(类)

我有一个 NServiceBus 主机,它订阅了某个事件并有自己的处理程序(#1)。该主机还引用了一个程序集,该程序集包含同一事件的另一个处理程序 (#2)。我想从 NServiceBus 配置中排除处理程序 #2,但我无法删除引用的程序集。

重要

1)我尝试使用此设置扫描:http : //docs.particular.net/nservicebus/hosting/assembly-scanning

2) 我使用 NServiceBus 版本 3.x

nservicebus nservicebus3

0
推荐指数
1
解决办法
245
查看次数