微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 .Net 核心中将配置传递给 Topshelf.HostFactory.Run 的最佳方法

如何解决在 .Net 核心中将配置传递给 Topshelf.HostFactory.Run 的最佳方法

我正在尝试将 Task Consumer 的当前 .Net 框架代码开发/转换为 Topshelf 和 .NET core 3.1。我想从 json 文件中读取配置数据并在 start 和消耗方法中使用这些数据。

将配置数据传递给任务消费者服务和其他端点的最佳和最简单的方法是什么

任何建议/意见都有帮助。

提前致谢。

我当前的代码

static void Main(string[] args)
            {

            var configuration  = new ConfigurationBuilder().AddJsonFile("appsettings.json",true,true).Build();
            var test2 = configuration.GetSection("RabbitMQSettings");
            Console.WriteLine(HostFactory.Run(cfg => cfg.Service<TaskConsumerService>()));
            }

ConsumerService code 
 public class TaskConsumerService : ServiceControl
        {
        IBusControl _bus;
        IConfiguration _configuration;

        public bool Start(HostControl hostControl)
            {

            _bus = ConfigureBus();
            _bus.Start();

            return true;
            }

        public bool Stop(HostControl hostControl)
            {
            _bus?.Stop(TimeSpan.FromSeconds(30));

            return true;
            }

        IBusControl ConfigureBus()
            {

            return Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                var rabbitMQUrl = ConfigurationManager.AppSettings["RabbitMQSettings:RabbitMQHostUrl"];
                cfg.Host(new Uri(rabbitMQUrl),h =>
                {
                    h.Username(ConfigurationManager.AppSettings["RabbitMQSettings:username"]);
                    h.Password(ConfigurationManager.AppSettings["RabbitMQSettings:pwd"]);

                });

                var queue0 =  ConfigurationManager.AppSettings["QueName"];
                cfg.ReceiveEndpoint(queue0,e =>
                {
                    e.Consumer<TransformConsumer>();
                });

            });

            }
        }

消费者代码

 public class TransformConsumer : IConsumer<IExecuteTransform>
        {

        private static readonly ILog m_log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        string address = string.Empty;
        const string json = "application/json";

        public async Task Consume(ConsumeContext<IExecuteTransform> context)
            {
            m_log.Info(" Transform started.");
            // Processing
            try
                {
                 address = string.Concat(ConfigurationManager.AppSettings["RabbitMQSettings:RabbitMQHost"],ConfigurationManager.AppSettings["RabbitMQSettings:queName"]);
                 IExecuteTransform message = await ConsumeSendEndPoint(context,address);
                 m_log.Info(" Transform Process completed.");
                }
            catch ( Exception e )
                {
                m_log.Error("Transform Failed");
                throw e;
                }
            }

          }

解决方法

我建议从 Topshelf 移动到 .NET Core 通用主机,它在 console service 示例中使用。它使用标准的 .NET Core 扩展包进行配置、依赖注入等。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。