MassTransit Consumer从未收到消息

2023-12-11

我正在按照在 ASP.NET Core 应用程序中使用 MassTransit 与 RabbitMQ 和 Autofac 的文档构建一个演示应用程序:

我的程序代码:

namespace MessageDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = Host.CreateDefaultBuilder(args)
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webHostBuilder =>
                {
                    webHostBuilder
                        .UseContentRoot(Directory.GetCurrentDirectory())
                        .UseIISIntegration()
                        .UseStartup<Startup>();
                })
                .Build();
            host.Run();
        }
    }
}

我的创业:

    public class Startup
    {
        public Startup(IWebHostEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            this.Configuration = builder.Build();
        }

        public IConfiguration Configuration { get; }
        public ILifetimeScope AutofacContainer { get; set; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddOptions();
            services.AddControllers();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            this.AutofacContainer = app.ApplicationServices.GetAutofacRoot();

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }

        // ConfigureContainer is where you can register things directly
        public void ConfigureContainer(ContainerBuilder builder)
        {

            builder.RegisterType<DemoContent>().As<IDemoContent>();
            builder.RegisterType<WeatherForecast>().As<IWeatherForecast>();

            builder.AddMassTransit(x =>
            {
                x.AddConsumer<DemoConsumer>();

                x.AddBus(context => Bus.Factory.CreateUsingRabbitMq(cfg =>
                {

                    cfg.Host("rabbitmq://my_container_ip/", host =>
                    {
                        host.Username("devuser");
                        host.Password("devuser");
                    });


                    cfg.ReceiveEndpoint("submit-data", ec =>
                    {
                        // Configure a single consumer
                        ec.ConfigureConsumer<DemoConsumer>(context);
                    });

                }));
            });
        }
    }

我的消费者:

    public class DemoConsumer : IConsumer<IDemoContent>
    {
        public async Task Consume(ConsumeContext<IDemoContent> context)
        {
            Debug.WriteLine($"Write content: {context.Message.Data}");
            await Console.Out.WriteLineAsync($"Write content: {context.Message.Data}");
        }
    }

只是为了测试,我通过点击控制器端点之一来触发发布,PublishEndpoint 由容器注入:

        // GET: api/Demo
        [HttpGet]
        public async void Get()
        {
            await _endpoint.Publish<IDemoContent>(new
            {
                Data = "Some random content"
            }, new CancellationToken());
        }

这一切似乎都有效 - 没有错误消息 - 使用 InMemoryTestHarness 添加了一个演示单元测试,并且该测试正在运行 - 我的 RabbitMQ 实例在管理器概述中注册发布的消息

我在 RabbitMQ 管理 UI 中收到发布者确认,但消息显示为不可路由(丢弃)。


由于您尚未添加托管服务,总线未启动

services.AddMassTransitHostedService();

它就在代码片段中在文档中.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MassTransit Consumer从未收到消息 的相关文章

随机推荐

  • 如何从R中的文件读取逻辑数据

    我生成了一个文件 其中每行都包含一个 TRUE 或 FALSE 逻辑值 现在我想将文件中的逻辑数据读入R 但是读入的数据是 字符 模式而不是逻辑值 我想知道如何从文件中读取数据作为逻辑值 我的 R 代码是 cat FALSE n file
  • C++ 顺时针排序 2D 点

    i wrote a program to arrange points on a graph in clockwise manner from 12 o clock such that a vector containing these p
  • 创建一个 titleize 方法,排除“小词”。

    我正在制作一种方法来大写我的输入 除了 a an 和 等任何单词 def titleize string to titleize string to titleize split map words words capitalize joi
  • 为什么允许这些默认参数?

    我发现了this问题 我完全困惑了 答案说b无效 非静态成员不能用作默认参数 这是完全有道理的 我不明白的是为什么另外两个没问题 事实上 如果默认值不是常量表达式 我正在努力理解语义是什么 这里发生了什么 默认参数在编译时明确评估 编译器只
  • 函数体存放在系统目录的什么位置?

    我正在尝试为我的数据库构建一个文档系统 我想包含我的函数和触发器的来源 我设法找到了函数和触发器的所有元数据 但是这些函数和触发器的实际主体存储在哪里 使用功能pg get functiondef 获取完整的函数定义 SELECT pg g
  • 在android上的opengles 2.0中绘制精灵的最快方法

    所以我试图弄清楚如何多次绘制单个纹理四边形 我的问题是 由于它们被创建和删除 并且它们中的每一个都有独特的位置和旋转 我不确定 vbo 是最好的解决方案 因为我听说在 android 上修改缓冲区非常慢 而且似乎我需要每帧创建一个新的缓冲区
  • Unity GVR Cardboard 相机在 Android 上无法正常工作

    我已经准备好了与 Google VR Cardboard 一起使用的统一环境 示例项目运行良好 一切都很好 在我的项目中 我有主相机对象 它在场景中移动 我已将 Strereo Controller 脚本 组件添加到相机中 并且它在 Uni
  • 获取:“找不到 SessionsHelper,期望它在 helpers/sessions_helper.rb 中定义”

    加载 login 后 我在日志文件中收到以下内容 Started GET login for 120 138 93 108 at 2016 01 02 03 06 24 0000 ActionController RoutingError
  • 上传者收到“策略过期”消息发送到 S3 的某些情况

    我最近实施了 Fine Uploader 它基本上是成功的 然而 少数用户无法上传 他们都使用现代浏览器 IE10 FF 和 Chrome 其中一个让我远程访问他们的机器 我可以在 Chrome 和 FF 上尝试它 我在两者上都遇到了相同的
  • Java Swing:如何获取包括刚刚键入的字符在内的 TextArea 值?

    键入按键后获取 TextArea 值 包括该字符 的最佳方法是什么 如果我在事件侦听器中执行此操作 textarea getText 返回不带最终新字符的值 基本上我看到两种方法 使用 invokeLater 之类的方法推迟处理 我更喜欢没
  • 确定重叠范围 - R

    我有两个数据框 一份包含一个月内的购买情况 一份包含该月播放的广告 广告 要了解购买是否可以可靠地链接到广告 我想了解有多少购买日期是在广告后 4 天内发生的 我创建了一些 繁琐的 代码来执行此操作 基于广告数据库的每一行的扩展以覆盖相关的
  • 尝试比较递归算法和迭代算法

    我有两种算法可以解决这个问题 生成汉明距离 t 内的所有比特序列 现在我想从理论上比较它们 如果需要的话 我确实有时间测量 The 迭代算法其复杂度为 O n 选择 t n where n是位串的长度 t是所需的汉明距离 The 递归算法
  • CAGradientLayer 不自动调整大小

    我在 UIImageView 上添加了一个 CAGradientLayer 我已将 UIImageView 上的自动调整大小蒙版设置为跨边界灵活 灵活的高度 宽度等 但是 当 UIImageView 调整大小时 我添加在 imageView
  • Express.js 处理不匹配的路由

    各位 我开发了一个 Rest API 我希望当路由不存在时发送自定义消息 而不是express js 默认发送的 html 消息 据我搜索 我找不到办法做到这一点 我尝试这样做 app all function req res res st
  • 如何向新手解释 Python 中的属性

    谁能用简单的话解释一下Python语言中的属性是什么 例如我能说些什么 list append x 使用直观 简单的日常生活示例在列表末尾添加一个对象 我发现属性描述了一个对象的属性 例如我的头发的属性是它们是棕色的和短的 很好 但如果是的
  • 实现自定义 u-boot 命令

    我想添加自定义命令命令u boot可以是一个简单的 hello world 命令 搜索后我发现了这个链接Yocto u boot 自定义命令它说看的地方timer命令输入cmd misc c作为起点 我怎么带这个timer命令到我的 u b
  • 使用 javascript 和 glsl 进行凹凸贴图

    A class creating buffers for a textured box to render it with WebGL class RasterTextureBox Creates all WebGL buffers for
  • 如何在DataGridView中突出显示搜索阿拉伯文本?

    我想突出显示 DataGridView 中给定的搜索文本 但数据是阿拉伯语的 我尝试使用 CellPainting 事件来查找搜索文本的边界并绘制 FillRectangle 但我无法准确获取搜索文本的边界 我使用的代码如下 private
  • 如何向 Google 工作表的每一行添加“发送电子邮件”按钮?

    我有一个 google 工作表 其中包含 4 列输入 用于编写电子邮件 我想 快速 为每一行创建一个按钮 全部添加到 D 列中 该按钮将利用该信息发送电子邮件only从按钮所在的行开始 我该怎么做呢 如何快速向每一行添加多个外观相同的按钮
  • MassTransit Consumer从未收到消息

    我正在按照在 ASP NET Core 应用程序中使用 MassTransit 与 RabbitMQ 和 Autofac 的文档构建一个演示应用程序 我的程序代码 namespace MessageDemo public class Pro