在Win32 C++应用程序中,我们启动一个消息循环,从队列中获取消息,转换它们然后调度它们.最终,每条消息都到达我们的WndProc,在那里可以处理相关的事件.
我明白那一部分.我不明白的是介于两者之间.特别:
TranslateMessage()真正的呼吁是什么?DispatchMessage(),在到达我的WndProc之前,消息会在什么地方摆动(即操作系统用它做什么)?如果有人知道上述的答案,请满足我的好奇心.谢谢.
在我参与的大多数项目中,异步解决方案的选择已成为众多讨论的源泉......
每次单个实体bean足以管理队列时:我们只是在表中存储消息(票证),处理cron将队列取消堆栈.这个简单的解决方案具有非常简单的优点,它基于数据库的事务上下文,我们可以在执行期间管理接收消息的状态.
因此,我提出以下问题:
1)我们对使用JMS有什么兴趣?JMS有哪些好处?
2)在哪种情况下更喜欢JMS与实体bean?
感谢您的回复和反馈!
我们的要求非常简单.向订阅主题的用户发送消息.我们需要我们的消息传递系统能够近乎实时地支持数百万个主题,并且可能支持数百万订阅者.我们的应用程序是用Java构建的.
我们几乎决定使用RabbitMQ,因为社区支持,文档和功能(可能会提供我们需要的一切).但我非常倾向于使用Redis,因为它看起来很有前途和轻量级.老实说,我对Redis作为一个消息传递系统的理解有限,但是看着越来越多的公司使用它作为排队(使用Ruby Resque),我想知道是否有像Resque in Java这样的产品,有什么优势或者使用Redis作为RabbitMQ上的MQ的缺点.
作为练习,我试图找到一个实现竞争消费者的例子.
许多生产者 - > MSMQueue < - 竞争消费者
到目前为止,我没有找到任何关于如何实现这一目标的文档.我首次尝试弄清楚如何在MassTransit或NServiceBus中实现如何实现多层间接.
任何帮助将不胜感激.
我只想以异步方式接收我的消息!它冻结了我的UI
public async void ProcessMessages()
{
MessageQueue MyMessageQueue = new MessageQueue(@".\private$\MyTransactionalQueue");
MyMessageQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
while (true)
{
MessageQueueTransaction MessageQueueTransaction = new MessageQueueTransaction();
MessageQueueTransaction.Begin();
ContainError = false;
ProcessPanel.SetWaiting();
string Body = MyMessageQueue.Receive(MessageQueueTransaction).Body.ToString();
//Do some process with body string.
MessageQueueTransaction.Commit();
}
}
Run Code Online (Sandbox Code Playgroud)
我只是像任何常规方法一样调用方法,并且它的工作正常!当我使用BackgroundWorkers而不是async/await时,此代码曾经工作
想法?
我有一些更新触发器,将作业推送到Sidekiq队列.因此,在某些情况下,可以有多个作业来处理同一个对象.
有几个独特的插件("中间件",独特的工作),它们没有太多记录,但它们似乎更像是节流器,以防止重复处理 ; 我想要的是一个阻止重复创建相同工作的节流器.这样,对象将始终以最新鲜的状态进行处理.是否有插件或技术?
更新:我没有时间制作中间件,但我最终得到了一个相关的清理功能,以确保队列是唯一的:https://gist.github.com/mahemoff/bf419c568c525f0af903
我注意到Socket.io正在为Pub和Sub使用两个独立的连接到Redis服务器.是否可以改善性能?或者它只是向更有组织的事件处理程序和代码的转变?两个单独的连接和一个单独的连接用于发布和订阅有什么好处和缺点.
PS系统正在推送它正在接收的相同数量的消息.它将更新推送到服务器,这些服务器位于层次结构中的同一级别,因此没有主服务器,推送消耗消息的所有更新或从服务器.一台服务器将有大约4-8个订阅,它会将消息发送回这些服务器.
PSS这对于专门建立的作业队列来说更像是一项工作吗?我正在看Redis的原因.是我已经在其中保留了一些共享对象,这些对象被所有服务器使用.消息队列是否值得添加另一个网络连接?
有没有办法通过命令行(win/linux)删除/清除ActiveMQ中的所有队列?我只能找到特定队列的命令.或者也许有办法通过activeMQ管理员这样做?同样,我只找到了如何逐个删除/清除队列,这可能非常繁琐.
谢谢!
我正在尝试设计一个模块化的实时监控系统,因此可以为不同的硬件和网络进行分布,扩展/重新配置.
我很快得出结论,我需要某种分布式企业消息系统.但是有很多选择,每个选项都有优点和缺点,其中一些选项决定了不同的架构.我正在努力弄清楚我是否需要经纪人或无代理系统,我是否需要某些系统的消息可靠性(例如RabbitMQ)或者像ZeroMQ这样的系统的轻量级高吞吐量,或者"按顺序到达"卡夫卡的高吞吐量.
首先,这些架构是否有意义?
ZeroMQ类型"Brokerless"系统:
笔记:
每个"B部分"可以有许多"A部分",许多"B部分"进入"C部分"
好处:
缺点
RabbitMQ类型Broker系统:
好处:
缺点
中间选项:
我看过卡夫卡.这是经纪人,因此发现得到了解决.然而,它似乎比RabbitMQ更轻量级,虽然它不保证交付(因此更快/更低的延迟)它确实维持秩序,RabbitMQ没有.它还可以缓冲消息 - 因此,如果出现网络问题,可以检索它们.
写下来之后,我不确定保证交付的重要性.如果控制模块收到消息,如果它是"旧"则无关紧要.如果历史学家有完整的历史,那将是伟大的 - 但它是否必不可少?
在ZeroMQ中实现我自己的"消息缓冲区"可能是一种选择,用于在发生故障时存储消息的网络通信.我有比RabbitMQ更多的控制权,并且可以在我需要它时通过更不可靠(通过网络)进行消息传递时实现它.
显然,权衡这些优点或缺点是我的工作.我的问题是:还有什么需要考虑的吗?并且确实为这两个选项的结构是否合理?
我计划将大多数实现都放在C#中,而且我目前在消息传递系统方面没有经验.
我正在研究需要实时广播纬度和经度的项目
我有类似下面的东西
namespace App\Events;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Support\Facades\Redis;
class TrackersBroadcast extends Event implements ShouldBroadcast
{
public $lat, $lng,$imei,$date_time
use SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(
$lat,
$lng,
$imei,
$date_time
)
{
$this->lat = $lat;
$this->lng = $lng;
$this->imei = $imei;
$this->date_time = $date_time;
}
/**
* Get the channels the event should be broadcast on.
*
* @return array
*/
public function broadcastOn()
{
return ['tracker-channel']; …Run Code Online (Sandbox Code Playgroud) message-queue ×10
redis ×3
jms ×2
architecture ×1
async-await ×1
asynchronous ×1
c# ×1
entity ×1
event-driven ×1
java ×1
laravel ×1
masstransit ×1
messaging ×1
msmq ×1
nservicebus ×1
php ×1
rabbitmq ×1
ruby ×1
sidekiq ×1
socket.io ×1
winapi ×1
windows ×1