标签: message-queue

如何在引擎盖下实现Win32事件驱动编程?

在Win32 C++应用程序中,我们启动一个消息循环,从队列中获取消息,转换它们然后调度它们.最终,每条消息都到达我们的WndProc,在那里可以处理相关的事件.

我明白那一部分.我不明白的是介于两者之间.特别:

  1. 不同类型的OS中断处理程序必须将消息放入所述"消息队列"中,但该队列驻留在进程地址空间中的哪个位置?它是如何暴露给中断处理程序代码的?
  2. "翻译"消息意味着什么?TranslateMessage()真正的呼吁是什么?
  3. 一旦被调度DispatchMessage(),在到达我的WndProc之前,消息会在什么地方摆动(即操作系统用它做什么)?

如果有人知道上述的答案,请满足我的好奇心.谢谢.

windows winapi message-queue event-driven

11
推荐指数
2
解决办法
4279
查看次数

为什么选择JMS进行异步解决方案?为什么它比简单的实体bean更好?

在我参与的大多数项目中,异步解决方案的选择已成为众多讨论的源泉......

每次单个实体bean足以管理队列时:我们只是在表中存储消息(票证),处理cron将队列取消堆栈.这个简单的解决方案具有非常简单的优点,它基于数据库的事务上下文,我们可以在执行期间管理接收消息的状态.

因此,我提出以下问题:

1)我们对使用JMS有什么兴趣?JMS有哪些好处?

2)在哪种情况下更喜欢JMS与实体bean?

感谢您的回复和反馈!

java entity asynchronous jms message-queue

11
推荐指数
2
解决办法
6714
查看次数

使用Redis for Pub Sub.RabbitMQ的优点/缺点

我们的要求非常简单.向订阅主题的用户发送消息.我们需要我们的消息传递系统能够近乎实时地支持数百万个主题,并且可能支持数百万订阅者.我们的应用程序是用Java构建的.

我们几乎决定使用RabbitMQ,因为社区支持,文档和功能(可能会提供我们需要的一切).但我非常倾向于使用Redis,因为它看起来很有前途和轻量级.老实说,我对Redis作为一个消息传递系统的理解有限,但是看着越来越多的公司使用它作为排队(使用Ruby Resque),我想知道是否有像Resque in Java这样的产品,有什么优势或者使用Redis作为RabbitMQ上的MQ的缺点.

message-queue rabbitmq redis

11
推荐指数
1
解决办法
4891
查看次数

如何实施竞争的消费者解决方案?

作为练习,我试图找到一个实现竞争消费者的例子.

许多生产者 - > MSMQueue < - 竞争消费者

到目前为止,我没有找到任何关于如何实现这一目标的文档.我首次尝试弄清楚如何在MassTransit或NServiceBus中实现如何实现多层间接.

任何帮助将不胜感激.

messaging msmq masstransit nservicebus message-queue

11
推荐指数
1
解决办法
2433
查看次数

MessageQueue和Async/Await

我只想以异步方式接收我的消息!它冻结了我的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时,此代码曾经工作

想法?

c# message-queue async-await

11
推荐指数
2
解决办法
8474
查看次数

Sidekiq:确保队列中的所有作业都是唯一的

我有一些更新触发器,将作业推送到Sidekiq队列.因此,在某些情况下,可以有多个作业来处理同一个对象.

有几个独特的插件("中间件",独特的工作),它们没有太多记录,但它们似乎更像是节流器,以防止重复处理 ; 我想要的是一个阻止重复创建相同工作的节流器.这样,对象将始终以最新鲜的状态进行处理.是否有插件或技术?


更新:我没有时间制作中间件,但我最终得到了一个相关的清理功能,以确保队列是唯一的:https://gist.github.com/mahemoff/bf419c568c525f0af903

ruby ruby-on-rails message-queue sidekiq

11
推荐指数
2
解决办法
7817
查看次数

我应该使用Redis的Pub和Sub单独连接吗?

我注意到Socket.io正在为Pub和Sub使用两个独立的连接到Redis服务器.是否可以改善性能?或者它只是向更有组织的事件处理程序和代码的转变?两个单独的连接和一个单独的连接用于发布和订阅有什么好处和缺点.

PS系统正在推送它正在接收的相同数量的消息.它将更新推送到服务器,这些服务器位于层次结构中的同一级别,因此没有主服务器,推送消耗消息的所有更新或从服务器.一台服务器将有大约4-8个订阅,它会将消息发送回这些服务器.

PSS这对于专门建立的作业队列来说更像是一项工作吗?我正在看Redis的原因.是我已经在其中保留了一些共享对象,这些对象被所有服务器使用.消息队列是否值得添加另一个网络连接?

message-queue event-handling redis socket.io

11
推荐指数
1
解决办法
5655
查看次数

ActiveMQ - 通过命令行删除/清除所有队列

有没有办法通过命令行(win/linux)删除/清除ActiveMQ中的所有队列?我只能找到特定队列的命令.或者也许有办法通过activeMQ管理员这样做?同样,我只找到了如何逐个删除/清除队列,这可能非常繁琐.

谢谢!

activemq-classic jms message-queue

11
推荐指数
3
解决办法
2万
查看次数

Brokered与非代理消息系统的优缺点

我正在尝试设计一个模块化的实时监控系统,因此可以为不同的硬件和网络进行分布,扩展/重新配置.

我很快得出结论,我需要某种分布式企业消息系统.但是有很多选择,每个选项都有优点和缺点,其中一些选项决定了不同的架构.我正在努力弄清楚我是否需​​要经纪人或无代理系统,我是否需要某些系统的消息可靠性(例如RabbitMQ)或者像ZeroMQ这样的系统的轻量级高吞吐量,或者"按顺序到达"卡夫卡的高吞吐量.

首先,这些架构是否有意义?


ZeroMQ类型"Brokerless"系统:

在此输入图像描述

笔记:

每个"B部分"可以有许多"A部分",许多"B部分"进入"C部分"

好处:

  • 高吞吐量,低出租率
  • 轻松集成到组件中,轻量级部署(无需部署代理).

缺点

  • 邮件无法保证送达.有些可能会掉线.这可能是橙色突出显示区域中的问题.它对GUI来说并不重要,但如果本地控制模块正在做决定,它可能需要所有信息.(考虑到这一点,只是最新的可能就足够了 - 没有必要用过时的数据做出决定).同样,如果A和B之间的网络出现故障,则历史记录将具有不完整的历史记录.这有多重要啊?
  • 没有"发现".需要更多地管理组件之间的关系.

RabbitMQ类型Broker系统:

在此输入图像描述

好处:

  • 邮件保证交付.
  • 发现通过经纪人管理.

缺点

  • 慢得多,高延迟
  • 更多部署和维护(经纪人/ RabbitMQ需要在机器上安装,它不仅仅是内置于模块中)

中间选项:

我看过卡夫卡.这是经纪人,因此发现得到了解决.然而,它似乎比RabbitMQ更轻量级,虽然它不保证交付(因此更快/更低的延迟)它确实维持秩序,RabbitMQ没有.它还可以缓冲消息 - 因此,如果出现网络问题,可以检索它们.

写下来之后,我不确定保证交付的重要性.如果控制模块收到消息,如果它是"旧"则无关紧要.如果历史学家有完整的历史,那将是伟大的 - 但它是否必不可少?

在ZeroMQ中实现我自己的"消息缓冲区"可能是一种选择,用于在发生故障时存储消息的网络通信.我有比RabbitMQ更多的控制权,并且可以在我需要它时通过更不可靠(通过网络)进行消息传递时实现它.

显然,权衡这些优点或缺点是我的工作.我的问题是:还有什么需要考虑的吗?并且确实为这两个选项的结构是否合理?

我计划将大多数实现都放在C#中,而且我目前在消息传递系统方面没有经验.

architecture message-queue

11
推荐指数
1
解决办法
4173
查看次数

为什么BroadCastEvent在Laravel中排队?怎么阻止?

我正在研究需要实时广播纬度和经度的项目

我有类似下面的东西

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)

php message-queue redis laravel laravel-broadcast

11
推荐指数
2
解决办法
2332
查看次数