- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不是 MSMQ 或 WCF 方面的专家,但我已经阅读了一些相关内容,它听起来和看起来都很棒。我正在尝试开发一些东西,最终但首先是一些需要稳健和持久的理论。
我猜 MSMQ 将托管在单独的服务器上。
将有 2 个 WCF 服务。一个用于传入消息,另一个用于传出消息(获取一条消息,进行一些内部处理/验证,然后将其放入传出消息队列或可能发送电子邮件/文本消息/其他)
我知道通过正确的配置,我们可以拥有这样的系统,它可以是事务性的(不会丢失任何消息)并且可以只发送一次,因此不会有重复消息的机会。
应用程序/服务将采用多线程处理消息,消息数量将达到成百上千。
但是在处理消息或整个服务生命周期期间,如果服务器崩溃怎么办?如果服务器重新启动怎么办?如果服务出于某种原因抛出异常怎么办?怎么可能不丢失该消息,而是如何将其放回队列中等待再次处理?另外,如何确保该服务能够再次产生自己的健壮性?
如有任何建议和详细信息,我将不胜感激。有很多东西可以接受,WCF/MSMQ 公开了很多选项。
最佳答案
你的假设:
MSMQ I guess will be hosted on a seperate server.
不正确。 MSMQ 安装在所有想要参与消息队列的机器上。
There will be 2 WCF services. One for incoming messages and the other for outgoing messages
在最典型的配置中,目标队列是监听服务的本地队列。
例如,您的 ServiceA 将有一个从中读取的本地队列。 ServiceB 也有一个从中读取的本地队列。如果 ServiceA 想要调用 ServiceB,它会将一条消息放入 ServiceB 的本地队列。
I understand with the right configuration, we can have the system so that it can be transactional (no messages are ever lost)
这是正确的。这是因为 MSMQ 使用称为存储转发的消息传递模式。参见 here寻求解释。
从本质上讲,可以安全地假设没有消息丢失的原因是因为从一台机器到另一台机器的消息传输实际上是在三个不同的事务下进行的。
The applications/services will be multithreaded to process messages
这很好,除非您需要在消息处理链中保留顺序。如果您需要有序处理,那么如果不实现重新排序器来重新应用订单,您就不能拥有多个线程。
I thought that MSMQ can be hosted seperately and have x servers share that queue?
所有想要参与消息交换的服务器都安装了 MSMQ。然后每个服务器都可以写入任何其他服务器上的任何队列。
The reason for my thinking was because what if the server goes down? Then how will the messages get sent/received into MSMQ
如果队列是事务性的,那么这意味着它们上的消息会持久保存到磁盘中。如果服务器出现故障,那么当它恢复正常时,消息仍然存在。当服务器宕机时,它显然无法参与消息交换。然而,消息仍然可以“发送”到该服务器——它们只是在发送者本地保留(在临时队列中),直到目标服务器重新联机。
so by having one central MSMQ server (and having it mirrored/failover) then there will be guarentee of uptime
使用消息队列的全部意义在于它是一种容错传输,因此您无需保证正常运行时间。如果您有 100% 的可用性,那么就没有理由使用消息队列。
how will WCF be notified of messages that are incoming?
每个服务都会监听自己的本地队列。当消息到达时,WCF 运行时会调用处理方法并处理消息。
how will the service be notified of failures of sending messages
如果 ServiceA 向 ServiceB 发送消息失败,则 ServiceB 将永远不会收到该失败的通知。也不应该。 ServiceA 将处理传输失败,而不是 ServiceB。在这种情况下,您的期望会在服务之间产生硬耦合,而消息队列应该消除这种耦合。
关于wcf - MSMQ、WCF 和健壮性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10244263/
我刚刚和一位 Microsoft MVP 聊天,他告诉我 MSMQ 已经过时了。这是真的?那么 SOA 的基础设施是什么??? 最佳答案 好吧,他们发布了一个带有 Vista 的新版本 (4.0),它
只是想确认如何将消息发送到远程事务性消息队列。 假设我有两台机器,A 和 B。 机器 A 有一个用于接收消息的事务队列。 Windows 服务监视此队列并对数据执行某些操作(将其保存到 SQL Ser
我一直看到documentation表示不可能发送到事务范围之外的远程事务 msmq 队列。我发现这很难相信,因为我认为我已经这样做了好几个星期了。我有一个小应用程序,它将消息发布到事务性的远程队列。
我正在使用 MSMQ 传输一个 byte 数组。 格式化程序是一个 BinaryMessageFormatter。 目标队列是私有(private)队列,我正在使用直接 TCP 通信。 目标机器在不同
有人可以为我指出一些关于为队列集群设置 MSMQ 的好资源吗?我有兴趣帮助: 实际设置集群MSMQ节点,并使其运行 设置应用程序以将消息发送到集群队列。 设置应用程序(至少 2 个)以从同一个集群队列
我是消息传递的新手,有点不清楚 MSMQ 是否可以为事务队列传递乱序消息。我想这一定是因为如果一条消息没有得到正确处理(并且因为我们将使用多个“竞争消费者”),那么其他消费者可以继续处理消息,同时将失
我们使用 BizTalk Server 通过 MSMQ 发送消息。接收系统要求每条消息都将扩展属性设置为 guid(作为字节数组)。 MSDN 记录了 MSMQMessage here 的 Exten
我正在做 NServiceBus 网站 ( http://docs.particular.net/samples/step-by-step/ ) 上的示例,当我在 Visual Studio 中运行时
我们有一个基于 NServiceBus 的 Pub/Sub 系统,我们有间歇性问题,消息无限期地卡在发布者传出队列上,而不是被传输到订阅者输入队列。 注意事项: 当我们重新启动发布者服务和订阅者服务时
当您向远程队列发送消息时,会在您自己的机器上创建一个临时传出队列。这是否意味着如果您自己的机器上没有安装MSMQ,您就不能使用远程队列? 最佳答案 你是对的。如果你自己的机器上没有安装 MSMQ,你就
我正在尝试使用以下路径连接到远程私有(private) MSMQ 队列: "FormatName:DIRECT=OS:remoteMachineName\Private$\MyQueue" 我收到以下
据我从文档中看到,您应该检查消息队列中是否有消息的方法是使用 Peek 方法。然后,您依靠它失败并返回 MessageQueueException 来告诉您队列为空。 public bool
我正在尝试使用主机文件中的别名指向包含 MSMQ 的服务器。如果我在 MSMQ 路径中指定实际服务器名称,则一切正常: var queue = new MessageQueue("FormatName
是否可以直接从队列中以字符串形式读取消息(与您在计算机管理 MSC 管理单元中查看 MSMQ 消息时看到的消息正文相同),以便我可以自己将其保存到数据库中?我希望能够存储它以便稍后重播而不会丢失任何数
有没有办法清除传出队列。似乎我无法使用 MMC 管理单元完成此操作,当我尝试在代码中清除它时出现错误 Format name is invalid将消息发送到的计算机不存在,因此它们永远不会被发送,但
有一个名为 queue1 的公共(public)队列在机器 A 上。我想从机器 B 向这个队列发送消息。为了实现这一点,我编写了那个 c# 代码。 if (MessageQueue.Exists("m
是否有某种标准配置设置、服务或工具可以接受来自一个队列的消息并将其移至另一个队列?自动处理死消息问题,并提供一些重试能力?我想这就是“MSMQ 消息路由”所做的事情,但似乎找不到有关它的文档(Wind
我正在尝试创建一个 MSMQ 解决方案,对于某些消息,我希望它们仅在下午 6 点之后处理,那么 MSMQ 中是否有一种方法可以在 Future 中处理该消息? 最佳答案 队列是一种先进先出的数据结构。
我们的系统中有许多 MSMQ 队列,包括私有(private)队列和公共(public)队列。有时,从队列中读取的 Windows 服务会崩溃,因此消息会在该队列中堆积。一旦队列达到一定大小(可能是
我们在使用 NServiceBus 的负载平衡的高容量环境中遇到了 MSMQ 问题。 我们的环境如下所示: 1 F5 通过循环分配网络流量到 6 个应用服务器。这 6 个服务器中的每一个都使用一个 B
我是一名优秀的程序员,十分优秀!