标签: nservicebus

NServiceBus MSMQ发送问题

我无法通过NServiceBus发送消息.我有一个ASP.Net MVC Web应用程序,在Win7 x64上开发,我已经将我的web.config配置为

       <MsmqTransportConfig    InputQueue="worker"    ErrorQueue="error"    NumberOfWorkerThreads="1"    MaxRetries="5"   />

  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="PricingInformation.Messages" Endpoint="worker2" />
    </MessageEndpointMappings>   </UnicastBusConfig>
Run Code Online (Sandbox Code Playgroud)

在application_start中,我连接了以下内容:

var bus = NServiceBus.Configure.WithWeb()
            .StructureMapBuilder()
            .XmlSerializer()
            .MsmqTransport()
                .IsTransactional(false)
                .PurgeOnStartup(false)
            .UnicastBus()
                .ImpersonateSender(false)
            .CreateBus()
            .Start();
Run Code Online (Sandbox Code Playgroud)

当我感兴趣的动作发生在应用程序中时我会开火

    public override void HandleEvent(SupplierPricingUpdatedEvent updatedEvent)
    {
        bus.Send(new ModelSupplierDetailsUpdatedMessage() {Id = updatedEvent.Id})
        return;
     }
Run Code Online (Sandbox Code Playgroud)

ModelSupplierDetailsUpdatedMessage是PricingInformation.Messages中的简单类,它使用接口标记IMessage并使用Serializable属性进行修饰.

MSMQ队列是设置的,而不是事务性的,包括NETWORK SERVICE和IIS_IUSRS在内的每个人都有完全控制权(在严重的故障排除措施中)

log4net显示以下内容:

DEBUG NServiceBus.Utils.MsmqUtilities  14 - Checking if queue exists: worker.
Run Code Online (Sandbox Code Playgroud)

DEBUG NServiceBus.Utils.MsmqUtilities 14 - 检查队列是否存在:错误.DEBUG NServiceBus.Unicast.UnicastBus Worker.15 - 在NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule上调用'HandleBeginMessage'INFO NServiceBus.Unicast.UnicastBus Worker.15 - worker初始化.DEBUG NServiceBus.Unicast.UnicastBus Worker.15 - 在NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule上调用'HandleEndMessage'调用消息 PriceInformation.Messages.ModelSupplierDetailsUpdatedMessage,PricingInformation.Messages,Version = 1.0.0.0,Culture …

msmq nservicebus

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

log4net - 为跟踪目的创建许多记录器是一个好习惯吗?

我想在我的消息传递应用程序中添加跟踪功能.我使用的每条消息都有一个唯一的标识符,该标识符被转发到后续消息(由原始消息产生的消息).

为了能够跨多个进程和可能的服务器监视消息的生命周期行为,我想使用log4net远程处理appender.

我可以使用一个记录器并在消息本身中编码消息ID:

  • Logger: "MessageLivetime" Message: "SomeId | message text")

但是我认为如果我为每条消息创建一个记录器会很聪明:

  • Logger: "MessageLivetime.SomeId" Message: "message text")

但是由于LogManager该类没有删除记录器的方法,我担心会遇到问题,因为会创建数千个废弃的记录器.

如果这种方法可行,那么对log4net更有洞察力的人能给我一个暗示吗?

我已经找到了上下文属性.他们是更好的选择吗?我如何写入事件上下文?

c# messaging log4net nservicebus

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

NServicebus发布事件 - 收到空消息

在我的域中发布事件后,我不断收到来自我的denormalizer主机的以下消息:

2011-07-22 14:18:32,374 [Worker.5] WARN  NServiceBus.Unicast.UnicastBus [(null)]
 <(null)> - Received an empty message - ignoring.
Run Code Online (Sandbox Code Playgroud)

我只是使用jolivers eventstore执行此操作:

return Wireup.Init()
                .UsingRavenPersistence("EventStore", new DocumentObjectSerializer())
                .UsingAsynchronousDispatcher()
                .PublishTo(new DelegateMessagePublisher(c => container.Resolve<IPublishMessages>().Publish(c)))
                .Build();
Run Code Online (Sandbox Code Playgroud)

IPublishMessages解析为:

 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 …
Run Code Online (Sandbox Code Playgroud)

domain-driven-design nservicebus eda cqrs event-store

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

不使用studio接口查询RavenDB

我试图在RavenDB管理工作室中查看我的传奇,并加载甚至是初始页面,我看到的只是这个"查询文档..."框,其中包含一个连续移动的进度条.我似乎无法超越它,从一页到另一页它不会消失.有没有办法将所有传奇数据拉入列表中,以便我可以查看它?问题似乎是传奇文件不断被添加.

我已经研究了HTTP API和Linq适配器,但我想我正在寻找一些已经存在的东西,可以很容易地进入服务器,就像Silverlight工作室一样,除了不那么痛苦.我或多或少只想将所有文档的快照拉成某种可读列表.

nservicebus ravendb

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

如何防止NServiceBus回滚事务或其中的部分内容?

我们有一个处理程序,它在收到消息时执行.该过程中有几个步骤,每个步骤都创建自己的新上下文,如下所示.

public void Handle(SomeMessage message)
{
  ...
  try
  {
    ...
    using(DataContext context = new DataContext()) { ... }
    ...
    using(DataContext context = new DataContext()) { ... }
    ...
  }
  catch (Exception exception)
  { 
    ...
    using(DataContext context = new DataContext()) { ... }
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,有时会抛出异常并将其捕获.当前事务被回滚(并且由于它没有明确地实现,我假设,不完全确定,它是由NServiceBus本身完成的,因为写入数据库的所有结果都消失了,包括catch语句中的结果) .

目前,我正在通过写一个文件来解决它,当一些可怕的事情发生但我也喜欢将它存储在数据库中.

所以,最终,我想防止最后一个操作,即catch语句中的操作被回滚.可以这样做,如果是这样的话怎么样?

c# entity-framework msmq transactions nservicebus

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

NServiceBus阻止消息被两个消费者处理?

NServiceBus文档列出了SQL传输的好处:

队列支持竞争的消费者(同一端点的多个实例从同一队列中提供),因此不需要分发器来扩展处理

http://docs.particular.net/nservicebus/sqlserver/design

如果多个消费者订阅了同一个队列,NServiceBus会阻止多个消费者处理消息?

在处理消息之前,NServiceBus是否会锁定整个表?或者是标记为"正在处理"的消息?

nservicebus nservicebus-distributor

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

Nservicebus传奇超时

我有一个saga,如果从调用返回的状态成功,saga结束,则每隔30秒检查一次API调用的状态,如果不是saga等待30秒并再次尝试.如果API调用未在60分钟内返回成功响应,则传奇超时并结束.

我在解除60分钟超时时遇到问题.我的代码是

public class MonitorSubmissionFeedSagaData: IContainSagaData
{
    public Guid Id { get; set; }

    public string Originator { get; set; }

    public string OriginalMessageId { get; set; }

    public bool TimeoutSet { get; set; }

    [Unique]
    public string JobId { get; set; }
}

public class MonitorSubmissionFeedSaga : Saga<MonitorSubmissionFeedSagaData>,
    IAmStartedByMessages<MonitorFeedSubmissonCommand>,
    IHandleMessages<StartCheckSubmissionCommand>,
    IHandleTimeouts<MonitorSubmissionFeedSagaTimeout>
{
    public const int SagaTimeoutInMinutes = 60;

    public IEmpathyBrokerClientApi PostFileService { get; set; }

    protected override void ConfigureHowToFindSaga(SagaPropertyMapper<MonitorSubmissionFeedSagaData> mapper)
    {
        mapper.ConfigureMapping<MonitorFeedSubmissonCommand>(x => x.JobId).ToSaga(saga => saga.JobId);

    }

    public void …
Run Code Online (Sandbox Code Playgroud)

c# msmq nservicebus nservicebus-sagas

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

使用NService Bus发布大量消息

我想使用n服务总线发布大量消息.我找到了一个重载的Publish方法,它将消息列表作为参数.当我尝试使用它时,它显示以下错误

  var message= new Message
                    {                           
                        Id = id,
                        Timestamp = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local),
                        PublishingStartTimestamp = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local)

                    };

                    bus.Publish(new[] { message, message});
Run Code Online (Sandbox Code Playgroud)

错误:'NServiceBus.IBus.Publish(params T [])'已过时:'已删除以减少复杂性和API混淆.有关更多信息,请参阅https://github.com/Particular/NServiceBus/issues/1346.将在5.0.0版本中删除.

什么是发布大量邮件的替代方法. 我的任务是每秒发布600个事件. 有人可以帮忙吗?

提前致谢!

nservicebus azureservicebus

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

NServiceBus:这是幻觉还是最佳实践?

鉴于使用MSMQ的NServiceBus微服务,当我将该服务的几个实例部署到同一台机器上时,我是否会扩展我的应用程序?我是否提高了性能?或者一个例子就足够了.我应该有一个更强大的机器来处理消息吗?

nservicebus microservices

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

X509Certificate2错误-系统找不到指定的文件

关联的代码在独立的控制台应用程序中运行良好,而在尝试使其正常运行的同时,却在NSB体系结构中出错。我试过在worker中进行相同的测试,也尝试在测试控制台应用程序中进行独立测试。无论哪种情况,它都会出错-X509Certificate2证书=新的X509Certificate2(filePath,“ *** key *** UeUHFxS”); 异常消息-System.Security.Cryptography.CryptographicException:'系统找不到指定的文件。该代码包括一个,如图所示,还包括一个与Activate设备相关的帮助文件。但是,从pfx文件路径和密钥初始化X509Certificate2的部分例外。

class Program
{
    static void Main(string[] args)
    {
        try
        {
            string filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
            filePath = Directory.GetParent(Directory.GetParent(filePath).FullName).FullName;
            filePath = Path.Combine(filePath, @"Cert\TestCompany-qa.partner.client.siriusxm.com.pfx");

            X509Certificate2 certificate = new X509Certificate2(filePath, "****key****");
            SoapMessageHelper soapHelper = new SoapMessageHelper(certificate, @"https://api-ext-test.siriusxm.com/SAT/UpdateDeviceSatRefresh/v_1");
            var test = soapHelper.ActivateDevice(new ActivateDeviceRequest()
            {
                SourceName = "12493",
                ESN = "W26890HW",
                TimeStamp = DateTime.UtcNow,
                TrasanctionId = System.Guid.NewGuid().ToString()
            });

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(test);

            foreach (XmlNode node in doc.DocumentElement.ChildNodes)
            {
                foreach (XmlNode locNode in node)
                {
                    if (locNode.Name == "ns0:responseRefreshDevice") …
Run Code Online (Sandbox Code Playgroud)

c# asp.net nservicebus x509certificate2 x509

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