首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Masstransit收到互操作性消息后,请求的服务'MassTransit.Scoping.ScopedConsumeContextProvider‘尚未注册

Masstransit收到互操作性消息后,请求的服务'MassTransit.Scoping.ScopedConsumeContextProvider‘尚未注册
EN

Stack Overflow用户
提问于 2020-11-27 23:46:44
回答 1查看 425关注 0票数 1

我正在升级到最新的Masstransit版本,当尝试使用文档中描述的最小消息发布原始消息json时,会生成以下错误:http://masstransit-project.com/architecture/interoperability.html

代码语言:javascript
复制
{
    "message": {
        "value": "Some Value",
        "customerId": 27
    },
    "messageType": [
        "urn:message:MassTransit.Tests:ValueMessage"
    ]
}
代码语言:javascript
复制
System.Runtime.Serialization.SerializationException: No deserializer was registered for the message content type: application/json. Supported content types include application/vnd.masstransit+json, application/vnd.masstransit+bson, application/vnd.masstransit+xml

**Adding the header Content_type application/vnd.masstransit+json and publishing again generates the follow error:**

Content-Type:   application/vnd.masstransit+json
MT-Fault-ConsumerType:  DocumentRouting.API.Consumers.DocumentRoutingConsumer
MT-Fault-ExceptionType: Autofac.Core.Registration.ComponentNotRegisteredException
MT-Fault-Message:   The requested service 'MassTransit.Scoping.ScopedConsumeContextProvider' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.
MT-Fault-MessageType:   EventBus.IntegrationEvents.IMessageReceivedIntegrationEvent
MT-Fault-StackTrace:    at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)
at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType, IEnumerable`1 parameters)
at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType)
at Autofac.Extensions.DependencyInjection.AutofacServiceProvider.GetRequiredService(Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at MassTransit.ExtensionsDependencyInjectionIntegration.ScopeProviders.InternalScopeExtensions.UpdateScope(IServiceScope scope, ConsumeContext context)
at MassTransit.ExtensionsDependencyInjectionIntegration.ScopeProviders.DependencyInjectionConsumerScopeProvider.MassTransit.Scoping.IConsumerScopeProvider.GetScope[TConsumer,T](ConsumeContext`1 context)
at MassTransit.Scoping.ScopeConsumerFactory`1.Send[TMessage](ConsumeContext`1 context, IPipe`1 next)
at MassTransit.Pipeline.Filters.ConsumerMessageFilter`2.GreenPipes.IFilter<MassTransit.ConsumeContext<TMessage>>.Send(ConsumeContext`1 context, IPipe`1 next)
at MassTransit.Pipeline.Filters.ConsumerMessageFilter`2.GreenPipes.IFilter<MassTransit.ConsumeContext<TMessage>>.Send(ConsumeContext`1 context, IPipe`1 next)
at GreenPipes.Filters.TeeFilter`1.<>c__DisplayClass5_0.<<Send>g__SendAsync|1>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at GreenPipes.Filters.OutputPipeFilter`2.SendToOutput(IPipe`1 next, TOutput pipeContext)
at GreenPipes.Filters.OutputPipeFilter`2.SendToOutput(IPipe`1 next, TOutput pipeContext)
at MassTransit.Pipeline.Filters.DeserializeFilter.Send(ReceiveContext context, IPipe`1 next)
at GreenPipes.Filters.RescueFilter`2.GreenPipes.IFilter<TContext>.Send(TContext context, IPipe`1 next)

环境: ASP.NET Core 3.1 Masstransit,带Autofac容器更换功能

代码语言:javascript
复制
 Host.CreateDefaultBuilder(args).UseServiceProviderFactory(new AutofacServiceProviderFactory())

Masstransit initialization using Autofac Module:

     protected override void Load(ContainerBuilder builder)
            {
               
                builder.AddMassTransit(x =>
                {
                    x.AddConsumer<ConsumerName>();
    
                    x.UsingRabbitMq((context, config) =>
                    {
                      config.Host(new Uri(busSettings.RabbitMQHost), h =>
                      {
                          h.Username(busSettings.Username);
                          h.Password(busSettings.Password);
                       });

                    config.ReceiveEndpoint(busSettings.QueueName, ec =>
                    {
                        ec.Consumer<ConsumerName>(context, cc =>
                        {
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-28 01:02:16

你的问题似乎被打断了,但你应该使用:

代码语言:javascript
复制
config.ReceiveEndpoint(busSettings.QueueName, ec =>
{
    ec.ConfigureConsumer<ConsumerName>(context, cc =>
    {

一旦添加了配置代码的其余部分,可能会出现其他问题/解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65040099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档