我正在从NServiceBus网站(http://docs.particular.net/samples/step-by-step/)做例子,当我在Visual Studio中运行时,一切正常,队列自动创建(即使我删除他们重新运行解决方案而不是自动创建解决方案.开发机器运行Windows 8.
我有一个模拟的Windows 2008 RC2 - 当我把我的解决方案bin文件夹带到服务器机器并尝试运行NServiceBus.Host.exe时它最终崩溃,原因是:"队列不存在或者你没有足够的权限执行操作" - 即使我以管理权限运行.查看队列时,我看到它们没有被创建,如果我手动创建队列而不是它的工作.
为什么在不同的机器上运行时不会自动创建队列?
更新
如果我运行NServiceBus.Host.exe /install它比创建队列,并将其安装为Windows服务.但我想做的是定期运行它.如果我只运行exe,它是否被视为自托管?
无论如何在没有安装RavenDB的情况下使用NServicebus 4?我们正在使用2.5,我想升级到4但如果我们必须在生产服务器上安装RavenDB,这将是一个艰难的销售.有什么工作吗?
在此配置中使用NSB 4:
Configure.With()
.DefaultBuilder()
.XmlSerializer()
Run Code Online (Sandbox Code Playgroud)
给出此错误警告
'NServiceBus.ConfigureXmlSerializer.XmlSerializer(NServiceBus.Configure, string, bool)'
is obsolete: 'Please use 'Configure.Serialization.Xml()' instead. Will be treated as an
error from version '5.0'. Will be removed in version '6.0'.'
Run Code Online (Sandbox Code Playgroud)
该怎么Configure.Serialization.Xml()用?
使用NServiceBus 4.3我想在出现某些条件时向错误队列发送消息.
场景是当我收到消息时,检查此消息是否指的是我们数据库中的一个或多个项目.如果有多个引用我扔了一个AmbiguousItemException并抓住它.我需要通过电子邮件向负责人提供正确的信息.所有这一切都被弄清楚,但我不希望再次尝试这条消息.相反,我宁愿将其移动到错误Queue,所以当我们收到我们需要的信息时,我们可以添加nullable属性并将消息放回队列进行处理.我已经尝试使用_bus.ForwardCurrentMessageTo("error"),_bus.Send("error", message), _bus.SendLocal(message).最后一个基本上将消息放在无限循环中.代码有点像这样.
public class MoveToErrorQueue
{
private readonly IBus _bus;
public MoveToErrorQueue(IBus bus)
{
_bus = bus;
}
public virtual void Send(ResubmitMessage message)
{
message.Foo= -1;
_bus.Send("error", message);
}
}
Run Code Online (Sandbox Code Playgroud)
以及调用它的代码
try
{
//removed for brevity
}
catch (AmbiguousItemException ex)
{
Log.Error(ex);
sendNotificationCommand.FailureMessage = ex.Message;
_moveToErrorQueue.Send(commandMesage);
}
SendNotification(sendScanningNotificationCommand);
Run Code Online (Sandbox Code Playgroud) 这不是问题,而是让我理解NserviceBus中发生的"魔法"的问题
我有一个工作环境,其中以这种方式调用NServiceBus-Service:
"D:\Service\NServiceBus.Host.exe" -service /serviceName:"MyServiceAdapter" /endpointName:"MyQueue.Adapter"
Run Code Online (Sandbox Code Playgroud)
现在在同一目录中有我的应用程序"My.Adapter.dll",它也有一个配置.任何地方都没有NserviceBus.config.仍然:NserviceBus似乎知道它必须使用"My.Adapter.dll"
为什么NServiceBus知道这一点?我没有在队列(MSMQ)或我的应用程序的任何其他位置找到任何引用.它是否保存在注册表中?如果是的话:在哪里?