我无法通过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 …
我想在我的消息传递应用程序中添加跟踪功能.我使用的每条消息都有一个唯一的标识符,该标识符被转发到后续消息(由原始消息产生的消息).
为了能够跨多个进程和可能的服务器监视消息的生命周期行为,我想使用log4net远程处理appender.
我可以使用一个记录器并在消息本身中编码消息ID:
Logger: "MessageLivetime" Message: "SomeId | message text") 但是我认为如果我为每条消息创建一个记录器会很聪明:
Logger: "MessageLivetime.SomeId" Message: "message text")但是由于LogManager该类没有删除记录器的方法,我担心会遇到问题,因为会创建数千个废弃的记录器.
如果这种方法可行,那么对log4net更有洞察力的人能给我一个暗示吗?
我已经找到了上下文属性.他们是更好的选择吗?我如何写入事件上下文?
在我的域中发布事件后,我不断收到来自我的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) 我试图在RavenDB管理工作室中查看我的传奇,并加载甚至是初始页面,我看到的只是这个"查询文档..."框,其中包含一个连续移动的进度条.我似乎无法超越它,从一页到另一页它不会消失.有没有办法将所有传奇数据拉入列表中,以便我可以查看它?问题似乎是传奇文件不断被添加.
我已经研究了HTTP API和Linq适配器,但我想我正在寻找一些已经存在的东西,可以很容易地进入服务器,就像Silverlight工作室一样,除了不那么痛苦.我或多或少只想将所有文档的快照拉成某种可读列表.
我们有一个处理程序,它在收到消息时执行.该过程中有几个步骤,每个步骤都创建自己的新上下文,如下所示.
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语句中的操作被回滚.可以这样做,如果是这样的话怎么样?
NServiceBus文档列出了SQL传输的好处:
队列支持竞争的消费者(同一端点的多个实例从同一队列中提供),因此不需要分发器来扩展处理
http://docs.particular.net/nservicebus/sqlserver/design
如果多个消费者订阅了同一个队列,NServiceBus会阻止多个消费者处理消息?
在处理消息之前,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) 我想使用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个事件. 有人可以帮忙吗?
提前致谢!
鉴于使用MSMQ的NServiceBus微服务,当我将该服务的几个实例部署到同一台机器上时,我是否会扩展我的应用程序?我是否提高了性能?或者一个例子就足够了.我应该有一个更强大的机器来处理消息吗?
关联的代码在独立的控制台应用程序中运行良好,而在尝试使其正常运行的同时,却在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) nservicebus ×10
c# ×4
msmq ×3
asp.net ×1
cqrs ×1
eda ×1
event-store ×1
log4net ×1
messaging ×1
ravendb ×1
transactions ×1
x509 ×1