【问题标题】:NServiceBus 4 without RavenDB没有 RavenDB 的 NServiceBus 4
【发布时间】:2013-08-09 18:57:47
【问题描述】:

有没有在不安装 RavenDB 的情况下使用 NServicebus 4?我们正在使用 2.5,我想升级到 4,但如果我们必须在生产服务器上安装 RavenDB,这将是一个艰难的销售。有什么解决办法吗?

【问题讨论】:

标签: ravendb nservicebus nservicebus4


【解决方案1】:

是的。您可以在没有 RavenDB 的情况下使用 NServiceBus。 而默认订阅存储(用于 pub/sub)、默认 saga 持久化和默认超时持久化是 RavenDB,使用如下所示的自定义初始化,您可以将它们切换为 NHibernate 持久化,在这种情况下您不需要 RavenDB。

class CustomInit : INeedInitialization
{
    public void Init()
    {
        Configure.Instance.UseNHibernateSubscriptionPersister();
        Configure.Instance.UseNHibernateSagaPersister();
        Configure.Instance.UseNHibernateTimeoutPersister();
    }
}

在 4.x 中,使用 NHibernate 的 app.config 也得到了进一步简化

         <connectionStrings>
<add name="NServiceBus/Persistence" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=nservicebus;Integrated Security=True"/>

并在 appSettings 中指定其他所需的 NHibernate 设置,如下所示:

    <appSettings>
<!-- dialect is defaulted to MsSql2008Dialect, if needed change accordingly -->
<add key="NServiceBus/Persistence/NHibernate/dialect" value="NHibernate.Dialect.MsSql2008Dialect" />
<!-- other optional settings examples -->
<add key="NServiceBus/Persistence/NHibernate/connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="NServiceBus/Persistence/NHibernate/connection.driver_class" value="NHibernate.Driver.Sql2008ClientDriver" />

【讨论】:

  • 一个更简洁的选项是 NHibernatePersistence.UseAsDefault();
  • 我确定这是正确的答案,但我认为我可能有更深层次的问题。我有一个以 nsb 安装的示例文件夹中的 PubSub.sln 为模型的发布者。但是,我已将其更改为结构图并指向我计划发送的消息。我修改了 EPConfig 以使用上面推荐的 NHP.Useasdefault() 和 app.config,但我将它指向我的本地。现在,当我调试它开始到控制台并挂起。不会遇到任何断点。乌。有什么想法吗?
  • 我现在必须提出这个问题,所以我会将您标记为正确答案。感谢您的帮助
  • 我发现如果数据库中不存在表,则不会创建它们。有推荐的方法来创建这些吗?我最终从测试 EXE 的 NServiceBus.NHibernate DLL 手动执行安装程序来创建表。之后我不断收到主键违规异常,但事情仍然有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多