我有一个线程,我用来定期更新我的Activity中的数据.我创建线程并启动一个looper以使用处理程序postDelay().在我的活动的onDestroy()中,我在我的处理程序上调用removeCallbacks().
我应该打电话handler.getLooper().quit()吗?或者不用担心它,让操作系统处理它?或者它会永远运行,消耗CPU周期?
我什么时候会使用像ironMQ这样的消息队列?何时我会使用像ironWorker这样的工作处理工作者?
我刚刚开始研究这两个主题,我发现很难区分这两个用途.我理解一个worker或多或少是一个沙盒,它将在app服务器之外的不同环境中运行程序,以增加用户体验.我也理解消息队列很像它的数据库替代方案,其中任务被添加到队列,然后另一个服务器/编程侦听该任务,然后将处理它.然而,虽然我认为我明白他们是什么,但我无法区分何时使用每一个以及为什么.
如果我理解正确,我会使用工作人员完成图像处理等任务.但是为什么我不能为此使用消息队列,更重要的是为什么不呢?当然,我可以在ironMQ中排队一个图像URL,然后再检索并处理它.在我看来,这似乎是一个额外的步骤,所以我会避免这一点.
当工作人员可用时,对于常见任务,消息队列对我来说似乎毫无意义.当然,对于发布评论这样的非密集型任务,我可以让工人这样做吗?
我可能误解了每个工具之间的差异,如果是这样,请让我直截了当.否则,请帮忙.
web-services message-queue background-process ironmq ironworker
标准窗口的队列包含多少条消息?队列溢出时会发生什么?
GetMessage和亲戚的文档没有说明这一点,PeekMessage只为某些类别的消息提供了是/否,而不是消息计数.
此页面说明队列是使用内存映射文件实现的,并且没有消息计数限制,但该页面是关于WinCE的.这是否也适用于桌面Win32?
我被要求设计并实施一个系统,用于从大量设备接收大量自动传感器数据.此数据将定期生成,并作为xml在http帖子中发送到服务器.如果设备未从服务器收到特定确认,则设备将继续重新发送相同的数据.在通过事务将数据插入主数据库中的多个表之前,需要对该数据进行一些潜在的重载处理,并且还需要将一些数据点入队以重定向到其他外部URL.
我打算使用Java应用程序服务器(倾向于GlassFish)和servlet来接收传入的数据.我想实现某种排队机制来暂时存储数据,以便返回传感器的响应不依赖于所有中间处理.单独的独立队列也是数据重定向部分的要求.经过一些研究后,两个主要选择似乎是:
1)在应用服务器上安装数据库,并使用表用于各种队列.队列将由Java应用程序处理,可以在应用程序服务器中运行,也可以作为自己的服务独立运行.
2)使用数据库支持的JMS解决方案来实现排队.
我对JMS并不熟悉,但从我看过的内容来看,似乎是这种情况下更好的解决方案.主要要求是在处理之前没有传感器数据丢失或从队列中丢弃,并且它或多或少地按顺序处理.我们还希望在某些时候可以轻松停止某些队列的处理,但仍然会让它们累积数据,并且这些消息永远不会自动过期.
使用策略1,我很明显如何满足这些要求,但它可能不那么健壮和可扩展,并且比策略2更复杂,因为我需要编写自己的多线程代码来处理各种独立队列.我想知道在为此目的使用JMS队列时可能存在的潜在缺陷是什么,因为我之前从未使用过它们.
数据完整性是一个大问题,所以我需要确保JMS能够保证在服务器重启,停电或者由于某种原因队列变得非常大的情况下不会丢失数据.例如,在一段时间内完成到主数据库的事务可能会导致JVM耗尽内存,崩溃并丢失所有累积的数据?(这将是噩梦般的场景).
此外,我想知道是否有任何方法可以通过应用服务器管理工具暂停JMS队列处理或轻松查看队列中的内容(我会将一个对象列入消息xml加上一些其他数据,包括收到的时间戳,等等.我在这里阅读了一些处理相关问题的帖子,但希望得到一些直接反馈.基本上我想知道JMS不是一个合适的排队解决方案的实例(如果有的话),如果这是其中一个案例.任何意见是极大的赞赏.
我正在研究用于嵌入式Linux上进程间通信的消息队列.我想知道为什么我没有使用Linux提供的消息队列如下:
msgctl,msgget msgrcv,msgsnd.
而不是创建共享内存,并与信号量同步?
直接在业务嵌入式产品上使用这组功能有什么缺点?
我正在构建一个包含许多部分的小型系统,我想使用消息pub/sub服务在各部分之间进行通信.
我读到了一些像RabbitMQ和ZeroMQ这样的消息队列服务,但我觉得它们太复杂了,感觉它是为分布式系统而生的.我的系统的所有部分都将用C++/Linux编写并放在一个小型的Raspberry Pi CPU上,因此我不需要像可扩展,跨平台,其他语言客户端这样的功能......
你们能给我一些适合我需要的服务或图书馆的建议吗?
我正在尝试设置RabbitMQ服务器集群,以使用主动/被动服务器架构获得高可用性队列.我正在遵循这些指南:
我对高可用性的要求很简单,我有两个节点(CentOS 6.4)与RabbitMQ(v3.2)和Erlang R15B03.Node1必须是"活动的",响应所有请求,Node2必须是"被动"节点,其中包含所有队列和消息(来自Node1).
为此,我配置了以下内容:
我接下来要做的是在两个节点之间创建一个集群:将Node2加入Node1(指南1).之后,我配置了一个策略来镜像队列(指南2),复制集群中所有节点之间的所有队列和消息.这可行,我可以连接到任何节点并发布或使用消息,同时两个节点都可用.
当我有一个在Node1上创建的队列"queueA"(队列A上的主服务器),并且当Node1停止时,我无法连接到Node2中的queueA来生成或使用消息时,Node2会抛出错误说Node1不可访问(我认为queueA没有被复制到Node2,并且Node2不能被提升为queueA的master).
错误是:
{"AMQP操作被中断:AMQP关闭原因,由Peer发起,代码= 404,text = \"NOT_FOUND - vhost'app01'中持久队列'queueA'的主节点'rabbit @ node1'关闭或无法访问\ ",classId = 50,methodId = 10,cause ="}
使用的步骤顺序是:
节点1:
1. rabbitmq-server -detached
2. rabbitmqctl start_app
Run Code Online (Sandbox Code Playgroud)
节点2:
3. Copy .erlang.cookie from Node1 to Node2
4. rabbitmq-server -detached
Run Code Online (Sandbox Code Playgroud)
加入集群(Node2):
5. rabbitmqctl stop_app
6. rabbitmqctl join_cluster rabbit@node1
7. rabbitmqctl start_app
Run Code Online (Sandbox Code Playgroud)
配置队列镜像策略:
8. rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
Run Code Online (Sandbox Code Playgroud)
注意:用于队列名称的模式是""(所有队列).
当我运行'rabbitmqctl list_policies'和'rabbitmqctl cluster_status'时一切正常.
如果Node1不可用,为什么Node2无法响应?这个设置有什么问题吗?
假设我有以下代码段,在qto的析构函数中调用deleteLater是否可以安全地管理它可能管理的其他QT对象?
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyQTObject qto;
qto.show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
因为我用泄漏检测器分析了类似的代码,并且调用了deleteLater的所有对象都没有正确释放,除非我用普通删除替换了调用.如果我已正确理解这一点,则deleteLater仅在QT消息队列中注册删除事件.这可能是在main的范围结束时调用qto的析构函数的问题,而QT消息循环已经从a.exec的返回结束了吗?因此,永远不会处理删除事件,实际上甚至没有被推入消息队列,因为没有?
使用Beanstalkd和队列的数据库驱动程序有很大区别吗?
一些优点和缺点是什么?数据库队列似乎更容易设置和运行,我应该知道如何使用它?
在有关它的文档中没有真正的解释.
我正在处理的应用程序需要与远程位置的IBM MQ服务器进行通信.我们目前有一个使用活动MQ的工作系统,它使用代理,以及连接到这个远程IBM MQ服务器的桥,并且工作正常.
由于一些新的增强,我们现在尝试使用IBM客户端jar而不是Active MQ来实现相同的功能.
我面临的问题是我可以连接到远程服务器的inboundQ并发送消息.但我总是从远程服务器出站队列接收null.但我无法检查是否在远程位置收到了消息.但是,如果通过旧的ActiveMQ系统发送相同的消息将从远程MQ服务器获得响应.
旧的Active MQ在内部使用桥连接到远程IBM MQ服务器,该服务器的配置与我正在使用的新代码完全相同.
我已尝试从互联网和堆栈溢出本身的多个代码,并始终我能够连接但没有得到任何响应.
此外,尝试从远程IBM MQ发送或接收时,我没有收到任何错误或异常.
我将粘贴一个我试图开始工作的示例代码.我在代码中更改了一些配置值.
我怀疑如下.
我正在做的就是将IBM MQ客户端jar复制到应用程序中,并使用代码将消息发送到远程MQ.我还没有安装任何其他应用程序.这样的系统会工作还是应该总是有一些像活动MQ这样的中间程序?
相同的代码能够从我在本地网络中安装但未能从远程服务器获得响应的IBM MQ服务器发送和接收?这让我相信如果我在配置中遗漏了什么?除了在代码中还应该配置什么?
我看到没有错误或例外.始终发送消息但响应为空.我没有看到任何用户名密码或公钥 - 私钥认证的使用.是否通常使用任何身份验证来检查源.?
我正在使用IBM MQ客户端5.3版本,我知道它已经过时了.但是使用它,因为它们工作的主动MQ设置使用相同的并且正常工作.我无法知道远程计算机上的IBM MQ服务器上存在哪个版本.如果我们使用与服务器MQ版本不同的客户端MQ版本,是否存在问题.?
在本地环境中适用于我的示例代码,即能够从我在本地网络中的另一台机器上安装的IBM MQ服务器发送和接收.当我尝试将其与远程IBM MQ服务器一起使用时,相同的代码将获取null响应.
import javax.jms.*;
import javax.jms.JMSException;
import com.ibm.mq.jms.*;
import com.ibm.jms.JMSMessage;
import javax.jms.TextMessage;
public class SendReceive {
private MQQueueConnectionFactory connectionFactory;
private MQQueueConnection connection;
private void runTest() {
try {
connect();
connection.start();
MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue("INBOUND_QUEUE"); /* values replaced with correct values in deployment server */
MQQueue queue2 = (MQQueue) …Run Code Online (Sandbox Code Playgroud) message-queue ×10
database ×2
java ×2
jms ×2
linux ×2
android ×1
beanstalkd ×1
c ×1
c++ ×1
handler ×1
ibm-mq ×1
ironmq ×1
ironworker ×1
laravel ×1
laravel-5 ×1
qt ×1
rabbitmq ×1
sysv-ipc ×1
web-services ×1
winapi ×1