【问题标题】:ServiceStack Redis Messaging - IMessage?ServiceStack Redis 消息传递 - IMessage?
【发布时间】:2013-09-27 14:30:38
【问题描述】:

我想使用 Redis 在我的 Service Stack 服务上调用服务操作。

我已经创建了一个简单的 DTO 作为消息请求,并且正在按照演示页面注册消息服务:

        var messageService = m_Container.Resolve<RedisMqServer>();
        messageService.RegisterHandler<SubscribeAddressRequest>(x => ServiceController.ExecuteMessage(x) );
        messageService.Start();

ServiceStack 实际上收到了这些消息,但我收到以下错误(来自我的容器):

No component for supporting the service ServiceStack.Messaging.IMessage was found.

这很奇怪,为什么 ServiceStack 要求将依赖项作为 IMessage 注入?我没有为 IMessage 注册任何提供者,所以我知道这会失败,但我没有看到任何提供者。我正在注册以下类型:

        string[] RedisHosts = new string[] { (string)ConfigurationManager.AppSettings["RedisHost"] };
        container.Register(
            Component.For<IRedisClientsManager>().ImplementedBy<PooledRedisClientManager>().DependsOn(new { poolSize = 1000, poolTimeOutSeconds = 1, readWriteHosts = RedisHosts }),
            Component.For<RedisMqServer>(),
            Component.For<IMessageQueueClient>().UsingFactoryMethod((k, c) =>
            {
                return k.Resolve<RedisMqServer>().CreateMessageQueueClient();
            })
        );

【问题讨论】:

    标签: servicestack messaging


    【解决方案1】:

    看起来这是您正在使用的 Container 的问题,我不确定它为什么会要求这样做,这可能与您的 IOC 的自动引导扫描过程有关,但这不是您想要的希望国际奥委会解决。为了帮助调查,RegisterHandler 回调中的类型为IMessage&lt;T&gt;,例如:

    messageService.RegisterHandler<SubscribeAddressRequest>(x // <- IMessage<T>
    

    【讨论】:

    • 我找到了问题的原因,即我的 IoC 容器(温莎城堡)正在使用动态 Func 在 RedisMqServer 上注入 RequestFilter 和 ResponseFilter,目的是从容器中解析 IMessage (使用 TypedFactoryFacility 时)。我不知道为什么,因为我没有注册任何 IMessage。我现在需要禁用委托工厂,这在温莎城堡 3 中似乎很困难:stackoverflow.com/questions/19115475/…
    • 我想我可以通过向容器添加一个 Func 来解决它,它只返回传递的消息,但这是删除 DelegateFactory 的一个不好的解决方法。
    【解决方案2】:

    我找到了问题的原因,即我的 IoC 容器(Castle Windsor)正在使用动态 Func 在 RedisMqServer 上注入 RequestFilter 和 ResponseFilter,目的是从容器中解析 IMessage(使用 TypedFactoryFacility 时) .

    这是因为委托工厂是 TypedFactoryFacility 的一部分(我通常使用接口工厂)。

    我通过在使用 Typed Factory Facility 时禁用 Castle Windsor 代理工厂的自动启用来解决这个问题:

    Remove components in Castle Windsor 3

    【讨论】:

      猜你喜欢
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      相关资源
      最近更新 更多