【发布时间】:2016-07-05 11:25:13
【问题描述】:
我有一个为我们的网页提供服务的 ASP.NET MVC 应用程序,我们还为第三方添加了一些服务路由,因为目前我们的数据库中只有这个 MVC 应用程序包装。 现在我需要实现 MQTT 消息订阅者,它应该在启动时启动客户端到 MQTT 代理。
我正在研究实现一个类,该类将实现到 MQTT 代理的连接启动,我可以从 MVC 应用程序的 Application_start 调用此方法。
原因:为什么我想同时拥有微服务和 MVC 项目是因为这是一个非常小的项目,我们处于上线的初始阶段并且不想扩展当前系统。实现微服务也将需要我在从代理接收事件时为微服务实现/创建 REST 路由,我想如果在 MVC 应用程序中直接在数据库存储库上更好地实现,我可以处理。
我想知道我的 MVC 应用程序通过遵循这种方法可能成为受害者的循环/问题。
到目前为止,我的代码看起来像这样
global.asax.cs 文件
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
MQTTSubscriber.StartMQTTSubscriber();
}
MQTTSubscriber.StartMQTTSubscriber() 是我要处理与 MQTT 代理的连接的地方。
我还有几个疑问 1)我真的需要windows服务来建立与代理的连接吗,我的意思是每次MVC应用程序域启动时都会触发MVC 5 application_start,无论是通过IIS还是Visual Studio,我可以在MQTTSubscriber.StartMQTTSubscriber()中编写连接建立逻辑喜欢关注
// create client instance
MqttClient client = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS));
// register to message received
client.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
string clientId = Guid.NewGuid().ToString();
client.Connect(clientId);
// subscribe to the topic "/home/temperature" with QoS 2
client.Subscribe(new string[] { "/home/temperature" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });
2)如果这是可行的方法,请告诉我我需要处理/照顾此解决方法的事情。
任何帮助/建议将不胜感激 谢谢
【问题讨论】:
-
或者我可以在同一个解决方案中实现 windows 项目,业务/存储库层与 windows 服务共享,并处理所有事件监听器逻辑到数据层。
标签: c# asp.net .net asp.net-mvc windows-services