【问题标题】:Programming design architecture for my application我的应用程序的编程设计架构
【发布时间】:2023-03-18 19:56:01
【问题描述】:

我需要从一个 asp.net 网站一次发送多条 SMS 消息,并轮询一个 POP3 帐户以获取传入的邮件,然后将其发送给多个收件人,一次一个。

我正在考虑这样做的方式是一个 Windows 服务,它将连接到我的 sql 后端,以查看是否有 SMS 消息要发送,例如每 10-20 秒左右。如果是这样,获取列表中的所有消息,将它们从表中删除,然后继续发送出去。

pop 帐户也是如此。

关于如何最好地提供此服务而不在 asp.net 网页启动时导致阻塞(例如,添加到 sql server 的消息)的任何想法?

平台是windows server 2003 R2,sql 2008标准,asp.net 3.5 SP1。

感谢您的建议。

【问题讨论】:

    标签: c# asp.net architecture


    【解决方案1】:

    我们已经使用 SQL Server 服务代理的队列机制实现了类似的场景。这个想法是每个插入的 SMS 记录都被触发器捕获,该触发器将包含 SmsID 的消息插入到服务代理队列中。

    然后您需要一个从队列接收消息的存储过程。如果没有消息,您的过程将一直运行,直到插入下一个条目。没关系,因为它不占用资源来监听队列。

    接下来,您需要一个 Windows 服务,它可以持续(递归地)调用 STP、组装 SMS 并发送它。

    Service Broker 队列相对于表中的标志的优势在于线程安全。这样一来,您就可以拥有任意数量的 Service 实例,而不必过多担心并发问题。

    您可以在这里找到一个不错的 Service Broker 教程:http://www.developer.com/db/article.php/3640771

    【讨论】:

    • 如果您在 2-3 年前问过这个问题,我会推荐 SQL 通知服务,但现在已知它们只能与 SQL 2005 标准一起使用...通知服务在 SQL 2008 和 MS 中已弃用大师们建议用 Service Broker 替换他们提供的功能,所以我投票 +1
    【解决方案2】:

    您可以使用 MSMQ(Microsoft 消息队列)来代替使​​用 Sql Server 进行排队。

    MSMQ 很容易设置,一旦启动并运行,它就比 Sql Server 更具可扩展性。

    所以你可以做的是在 MSMQ 中设置一个新队列来接收你想要发送的消息。消息通常是某种描述消息、发送者和接收者的消息对象。

    然后您可以设置一个定期轮询队列的服务,或者您可以设置 MSMQ 以在每次将新消息发送到队列时启动您选择的类。

    如果您需要消息的日志,您可以在发送消息时让服务/发送者对象写入 sql server 中的日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-30
      • 2023-03-25
      • 2014-06-20
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      相关资源
      最近更新 更多