标签: message-queue

使用zmq(zeromq)检测慢速阅读器

我正在尝试更换一个小的本土消息传递系统,并且正在玩zmq.我将需要检测慢速读取器,并启动/断开它们 - 慢速读取器几乎意味着特定的消费者队列大小超过某个阈值.

到目前为止,似乎zmq会阻止每个消费者,如果其中一个消费者有点慢(足够公平) - 但我找不到任何方法来检测潜在的慢消费者.任何人都有任何经验,如何使用zmq - 或者有任何其他无经纪人的消息传递系统来重新推荐?

message-queue zeromq

5
推荐指数
1
解决办法
1996
查看次数

C++客户端通过SSL连接到IBM MQ

我需要使用客户端通道定义表更改C++代码以与WebSphere MQ连接.在Windows 2003和v6.0上有大约5000多个MQ客户端和10个MQ服务器.如果有人使用C++和CCDT,请帮助我.

c++ message-queue ibm-mq

5
推荐指数
1
解决办法
2962
查看次数

ebay,他们如何在时间到期后结束拍卖?

eBay如何结束拍卖并标记获胜者?假设数据库中有一个拍卖结束日期,一旦该时间超过当前时间,拍卖需要关闭,标记获胜者等.在sql 2005中如何处理这样的事情?他们每秒查询数据库以找到过期的拍卖吗?显然,他们需要在拍卖结束后立即将其标记为关闭.他们无法为每次拍卖创建sql作业,或者是他们?有任何想法吗?我有一个遵循类似思维过程并需要帮助的集成.

sql sql-server-2005 message-queue

5
推荐指数
1
解决办法
1150
查看次数

如何在Android上进行非阻塞事件处理?

这个问题是关于Android上的事件处理.它不是特定于c ++.

我需要处理UI/OS事件,而不是在处理完所有事件时阻塞.

原因是我移植的应用程序非常大,不能轻易地重写以处理工作线程上的自己的东西.相反,应用程序引擎要求在长期操作期间处理UI/OS事件,否则这些操作将被阻止.

我发现ALooper_pollAll(...)不会为我这样做.例如,如果我在我的活动中创建一个对话框并开始一个长操作,ALooper_pollAll()将不会使我的对话框出现 - 它只会在我返回主循环时显示(我在onNativeWindowCreated中对此进行了测试).

我发现几乎可以解决的唯一解决方案是在UI线程上执行内部循环,通过JNI调用以下代码:

public class MyActivity extends NativeActivity {

  private Handler _uiEventsHandler = null;

  private Runnable _uiEventsTask = new Runnable() {
    public void run() {
      Looper looper = Looper.myLooper();
      looper.quit();
      _uiEventsHandler.removeCallbacks(this);    
      _uiEventsHandler = null;
    }
  };

  public void ProcessEvents(int timeout)
  {
    if (_uiEventsHandler==null) {
      Looper looper = Looper.myLooper();
      _uiEventsHandler = new Handler(looper);
      _uiEventsHandler.removeCallbacks(_uiEventsTask);    
      //_uiEventsHandler.postDelayed(_uiEventsTask,timeout);    
      _uiEventsHandler.post(_uiEventsTask);    
      try {
        looper.loop();
      } catch (RuntimeException re) { 
        // We get an exception when we try to quit the loop, …
Run Code Online (Sandbox Code Playgroud)

java-native-interface events android message-queue looper

5
推荐指数
1
解决办法
2444
查看次数

Firemonkey - 消息处理

我目前正在尝试开发一个基于Firemonkey的项目.我正在使用Firemonkey的UI功能,因为该项目由许多较小的应用程序组成,每个应用程序都有一个3D方面.我目前只使用FMX框架开发/部署到Windows,但可能会在以后跨平台.

通过在后台构建VCL Windows应用程序来执行非常具体的操作,然后构建FMX前端,我遇到了大多数问题.但是,这仅适用于您只想执行应用程序以执行其设计的操作,因此可以使用参数执行应用程序.在其中一个应用程序中,我发现需要使用消息(或类似的东西).例如,在我的FMX应用程序中,如果我单击"button1",我希望它向后台VCL应用程序发送消息以执行"action1",而不是使用参数执行它.

一个很好的例子可能是在后台应用程序中使用VCL TMediaPlayer,前端FMX应用程序用于显示信息并提供播放,暂停等控制.这样它基本上就成为具有VCL功能的FMX UI.

到目前为止,我还没有找到任何关于消息的信息(例如在VCL中,用"SendMessage"或"PostMessage"或类似的东西完成)是通过Firemonkey处理的,可以通过本地帮助文件,也可以通过广泛的谷歌搜索.我发现的所有内容都与电子邮件有关(大概是因为我的大多数搜索术语中都有"消息"这个词).

Can anyone point me in the right direction on how messages would be handled with Firemonkey/FMX?

此致,Scott Pritchard

delphi message-queue delphi-xe2 firemonkey

5
推荐指数
1
解决办法
6896
查看次数

将一个队列实例与多个Redis实例同步

场景: 我们有多个地理位置分布的节点,我们希望队列收集该位置的消息.然后我们希望将收集到的数据从每个节点中的每个队列发送到中心位置的相应队列.在中心节点,我们将提取队列中收集的数据(来自其他节点),处理它并持久存储它.

约束:

  • 数据对我们非常重要.因此,我们必须确保在任何情况下我们都不会丢失数据.
  • 因此,我们需要在每个节点上使用持久队列,这样即使节点由于某些随机原因而出现故障,当我们启动它时,我们也可以安全地收集数据并将其发送到可以处理它的中心节点.
  • 类似地,如果中央节点发生故障,则数据必须保留在所有其他节点上,以便当中央节点出现时,我们可以将所有数据发送到中央节点进行处理.
  • 此外,中央节点上的数据不得重复或再次存储.也就是说,在其中一个节点上收集的数据应仅存储在中央节点上一次.
  • 我们收集的数据对我们非常重要,向中央节点传输数据的顺序不是问题.

我们的解决方案 我们已经考虑了几个解决方案,其中我将列出我们认为最好的解决方案.一种可能的解决方案(我们认为)是使用Redis来维护各处的队列,因为Redis提供持久存储.然后可能在所有地理上分离的节点上运行一个守护进程,该守护进程从队列中读取数据并将其发送到中央节点.接收数据的中心节点向它接收数据的节点发送ACK(因为数据对我们非常重要),然后在接收到ACK时,节点从队列中删除数据.当然,将存在必须接收ACK的超时时段.

问题 上面提到的解决方案(根据我们)可以正常工作,但问题是我们不想自己实现整个同步协议,原因很简单,我们可能在这里错了.我们无法在Redis中找到这种特殊的同步方式.因此我们对其他基于AMQP的队列开放,如RabbitMQ,ZeroMQ等.我们再次无法弄清楚我们是否可以使用这些解决方案来实现这一目标.

  • 这些消息队列或任何其他数据存储是否提供可以解决我们问题的功能?如果是,那怎么样?
  • 如果没有,那么我们的解决方案是否足够好?
  • 有谁能建议更好的解决方案?
  • 有没有更好的方法来做到这一点?
  • 什么是使其安全失败的最佳方法?
  • 我们收集的数据对我们非常重要,向中央节点传输数据的顺序不是问题.

message-queue amqp rabbitmq zeromq redis

5
推荐指数
1
解决办法
1102
查看次数

分布式分析系统数据一致性的体系结构设计

我正在重构一个将进行大量计算的分析系统,我需要一些关于可能的架构设计的想法,以解决我面临的数据一致性问题.

当前架构

我有一个基于队列的系统,其中不同的请求应用程序创建最终由工作者使用的消息.

每个" 请求应用程序 "将大型计算细分为较小的部分,这些部分将被发送到队列并由工作人员处理.

当所有部分都完成后,原始的"请求应用程序"将合并结果.

此外,工作者使用来自集中式数据库(SQL Server)的信息来处理请求(重要:工作人员不会更改数据库上的任何数据,只会消耗它).

当前架构

问题

好.到现在为止还挺好.当我们包含更新数据库信息的Web服务时,就会出现问题.这可能在任何时候发生,但至关重要的是,源自相同"请求应用程序"的每个"大计算"在数据库上看到相同的数据.

例如:

  1. 应用A生成消息A1和A2,将其发送到队列
  2. 工人W1选择消息A1进行处理.
  3. Web服务器更新数据库,从状态S0更改为S1.
  4. 工人W2拿起消息A2进行处理

我不能让工人W2使用数据库的状态S1.为了使整个计算保持一致,它应该使用先前的S0状态.

思考

  1. 一种锁定模式,用于防止Web服务器在工作者消耗数据时更改数据库.

    • 缺点:锁定可能会长时间打开,因为不同的"请求应用程序"的计算形式可能会重叠(A1,B1,A2,B2,C1,B3等).
  2. 在数据库和worker(通过req.app控制db缓存的服务器)之间创建新层

    • 缺点:添加另一个层可能会带来很大的开销(可能?),这是很多工作,因为我将不得不重写工作者的持久性(很多代码).

我正在等待第二个解决方案,但对此并不十分自信.

有什么好主意吗?我设计错了,还是错过了什么?

OBS:

  • 这是一个巨大的2层遗留系统(在C#中),我们正在尝试尽可能少地努力发展成更具可扩展性的解决方案.
  • 每个worker都可能在不同的服务器上运行.

architecture sql-server distributed message-queue distributed-caching

5
推荐指数
1
解决办法
359
查看次数

RabbitMQ:如何防止QueueDeclare自动生成新的队列

使用RabbitMQ我正在做类似的事情:

channel.QueueDeclare(QueueName, true, false, false, null);
Run Code Online (Sandbox Code Playgroud)

默认情况下,如果现有名称与提供的名称不匹配,RabbitMQ将创建新队列.我想抛出异常.那可能吗?

谢谢

c# message-queue rabbitmq

5
推荐指数
2
解决办法
3726
查看次数

写入MongoDb之前的RabbitMQ队列消息

应用程序将日志从许多机器发送到Amazon Cloud,并将它们存储在某个数据库中。

> Lets assume: one machine log size: 1kB every 10 seconds, num of machines from
1000 to 5000
Run Code Online (Sandbox Code Playgroud)

我的第一种方法是将日志在Rabbitmq中排队,然后Rabbitmq使用者将其存储在sql数据库中。

  1. 当消费者仅执行一些基本存储操作时,我真的需要Rabbitmq吗?

第二种方法是将日志在Rabbitmq中排队,但将其存储在mongodb中

  1. 在写入mongodb之前将消息排队是否有意义?

messaging message-queue rabbitmq mongodb

5
推荐指数
1
解决办法
6032
查看次数

如何在Masstransit / RabbitMQ中组织队列?

我想了解使用消息的最佳做法。我已经阅读过MassTransit文档,并且已经在搜索有关此内容,但我无法得出任何结论。

我有一个发布消息的api(托管总线实例)。这些消息是多种多样的,因为此api不是微服务(用于购买,销售等的消息)。

我该如何组织我的消费者/队列?

  1. 一个队列类型的进程?例如,一个用于购买,另一个用于销售等。此解决方案可能涉及许多流程,因此我不确定这是否是一个好的解决方案。如果我想要不同的购买队列,例如purchase.stock,purchases.suppliers等?进程数可能会大大增加。我认为这是可伸缩性的一个不错的选择,但是管理如此多的流程可能很棘手。
  2. 有多个进程队列(按域对队列进行分组)?例如,一个让多个消费者消费与购买相关的消息并管理不同队列的过程,例如purchase.stock,purchases.suppliers ...这个选项对我来说更有意义,但我不确定。

masstransit message-queue servicebus rabbitmq messagebroker

5
推荐指数
1
解决办法
864
查看次数