我们有一个客户端应用程序需要向服务器发送消息以进行各种通知.为了使客户端可以偶尔运行,我将采用消息队列方法.队列处理将从队列中取出消息并调用Web服务,将其置于另一个队列中以最终进行处理.这个问题是关于客户环境的; 服务器环境已经确定.
我不想使用MSMQ,因为我们无法控制所有客户端PC以正确安装/配置和保护MSMQ,并且由于用于调查MSMQ队列内容的工具质量,支持更具挑战性.SQL Server 2005 Express位于所有计算机上,用于存储应用程序的数据.
我目前有两个选项:
ThreadPool.QueueUserWorkItem这些消息由针对每种消息类型配置的处理程序进行处理.所有System.Transactions.TransactionScope这些只有在成功处理后才会从持久队列中删除.我对服务总线的经验很少(我仍然没有真正获得服务总线术语)所以我更关心学习曲线,而不是写一些更简单的东西,以我需要的方式满足我的要求(部署是一个重要的考虑因素.
有人有想法吗?
类org.jboss.jms.server.destination.QueueService和org.jboss.mq.server.jmx.Queue之间有什么区别?
已经使用PHP已经有一段时间了,我想知道整个"消息队列"是什么.我们以facebook为例.我可以更新我的状态但是我必须向所有朋友显示状态更新(假设我有3000个关注者).如果有评论则需要更多工作,并且必须通过电子邮件通知所有留下评论的朋友.通过我看到的示例,似乎所有消息队列都采用"消息"(我的状态更新)并将其放入一些临时空间(文件系统或数据库表).然后我有一个cron工作,把它拉出来并更新我的表.
话虽如此,我该如何处理这些数据呢?我想我对这将如何真正帮助我感到困惑.如何将以下函数转换为消息队列,然后安排函数以后运行?
1 - 更新我的状态2 - 现在在我的页面和所有朋友中发布它.3 - 如果留下评论,现在将最新评论通过电子邮件发送给"订阅"该评论的人.
我的问题是,我该如何操纵这些数据?我只是插入"注释"然后有一个"工作",将该注释拉出来并将其插入一个处理它的函数?
这是我打算研究的一个例子.
http://www.freeopenbook.com/php-hacks/phphks-CHP-5-SECT-18.html
提前致谢.
背景: 我们当前的系统涉及两个服务(一个用Java编写,另一个用PHP编写),它们使用HTTP回调相互通信.我们希望使用ActiveMQ(或其他,如果需要)从HTTP回调迁移到基于消息的体系结构.我们可能会使用STOMP在它们之间进行通信.最终,PHP服务将用Java重写,但这不是该项目的一部分.
问题: ActiveMQ系统如何通知PHP已将新消息发布到PHP系统订阅的队列?在当前系统中,回调固有地调用PHP并触发它.这消失了基于消息的架构.
可能的解决方案:
我需要将shell脚本(从基于linux的app调用)的信息传递给java应用程序.
命名管道很痛苦,因为我不能在不考虑对管道读/写端的复杂影响的情况下启动/停止任何一项服务.
套接字很难,因为如果重新启动监听过程,就没有排队机制,简单的实现需要不断创建新的套接字(否则shell脚本会因check-and-restart-socket和排队代码而变得非常复杂).
我最近正在阅读这些System V/POSIX linux消息队列.我正在运行Fedora 12,并想知道是否有一种很好的方法来配置这些消息队列并从Java进行交互.
我的应用程序在Jboss 7.1.1上运行.我有一个每分钟运行一次的调度程序,需要检查DLQ中是否有消息并在数据库中进行一些更新.
我写了一个消息,消费者听取预定义的自定义DLQ.问题是我可以看到自定义DLQ中有消息但consumer.receiveNoWait()始终返回null.
以下是创建消费者的代码:
/*this is running fine and creating the consumer*/
public DestinationHandlerImpl(ConnectionFactory connectionFactory,
Destination destination, boolean useTransaction, int delMode,
boolean isProducer) throws JMSException {
connection = connectionFactory.createConnection();
consumer = session.createConsumer(destination);
}
Run Code Online (Sandbox Code Playgroud)
这是使用消息的代码(每隔一分钟运行一次):
/*this always return null, event when there are messages in the queue*/
public <T extends BaseEvent> T recieveMessage()
throws JMSException {
Message message = consumer.receiveNoWait(); // ----> always return null!!!
if (message != null && !(message instanceof ObjectMessage)) {
throw new IllegalArgumentException(
"message object …Run Code Online (Sandbox Code Playgroud) 在使用POSIX消息队列时,我注意到文件系统上创建了一些文件,其名称是我创建队列.我的问题:
Q1.消息队列是否将硬盘上的消息排队,而不是RAM?
Q2.如果是这样,那么在实施中它是否应该非常慢,因为它涉及HardDisk?
编辑:
我在"Linux编程接口 "一书中读到了这一点:
在Linux上,POSIX消息队列在虚拟文件系统中实现为i节点,消息队列描述符和打开消息队列描述分别实现为文件描述符和打开文件描述.但是,这些是SUSv3不需要的实现细节,并且在某些其他UNIX实现上不适用.
即使它是VFS,它仍然存储在HardDisk上,对吧?
记住这些信息,现在有人可以评论第二个问题吗?(和/或第一个也有更多要添加的东西)
我们需要构建一个软件框架(或中间件),以便在单个机器上运行的不同软件组件(或模块)之间实现消息传递.该框架将提供以下功能:
根据上述要求,以下哪种方法是正确的(有其推理)?:
有消息来源,有一些明显的缺点和优点:
我赞成Option-2,但我不确定我的论点是否足够稳固.你有什么看法?
编辑:根据要求澄清,这里有更多的规格细节:
multithreading middleware message-queue multiprocessing inter-process-communicat
我开发了一个rest api,它接受一些数据并将其存储在消息队列(Redis List)中.现在从redis这个数据被推送到MySQL数据库.问题是客户端需要等到数据写入mysql.
我希望客户端应该等到数据写入消息队列(Redis List),并且将数据推送到MySQL的函数应该异步执行.我该怎么做 ?我的整个代码库都是用PHP编写的,所以我更喜欢用PHP编写代码.
我读过这个,但没试过.
我很困惑如何执行slave.php(在链接中提到).我的意思是当一条新消息到达队列时,slave.php将如何找到它.
我不想为此使用cronjob.相反,当新消息到达时,slave.php应该异步执行.怎么做?
我有四个当前的消费者在Amazon AWS上侦听同一个队列.从队列中拉下消息时,有时两个不同的消费者会消耗相同的消息.请参阅下面的日志:
18:01:46,515 [jmsContainer-2] DEBUG - 从队列中收到消息:ID:3698a927-930b-4d6a-aeca-f66922528792
18:02:12,825 [jmsContainer-3] DEBUG - 从队列收到的消息:ID:3698a927-930b-4d6a-aeca-f66922528792
我有一个包含4个并发使用者的JMS容器设置.我将可见性超时设置为30秒.
由于container2收到了消息,容器3怎么还能访问它?
JMS容器是否在执行侦听器方法(handleMessage)之前或之后执行自动确认?
message-queue ×10
java ×5
jms ×3
php ×3
linux ×2
.net ×1
amazon-sqs ×1
asynchronous ×1
java-ee ×1
jboss ×1
jboss7.x ×1
middleware ×1
posix-api ×1
redis ×1
servicebus ×1
shell ×1
stomp ×1