标签: message-queue

持久性消息传递/服务总线 - 自己动手或冒险学习曲线?

我们有一个客户端应用程序需要向服务器发送消息以进行各种通知.为了使客户端可以偶尔运行,我将采用消息队列方法.队列处理将从队列中取出消息并调用Web服务,将其置于另一个队列中以最终进行处理.这个问题是关于客户环境的; 服务器环境已经确定.

我不想使用MSMQ,因为我们无法控制所有客户端PC以正确安装/配置和保护MSMQ,并且由于用于调查MSMQ队列内容的工具质量,支持更具挑战性.SQL Server 2005 Express位于所有计算机上,用于存储应用程序的数据.

我目前有两个选项:

  1. 编写一个相当基本的持久性消息队列,在序列化后将消息存储在表中,然后使用ThreadPool.QueueUserWorkItem这些消息由针对每种消息类型配置的处理程序进行处理.所有System.Transactions.TransactionScope这些只有在成功处理后才会从持久队列中删除.
  2. 使用NServiceBus(这是我们作为一个团队使用的服务总线,因此MassTransit等不是选项)在客户端上,使用本地数据库的Service Broker传输.

我对服务总线的经验很少(我仍然没有真正获得服务总线术语)所以我更关心学习曲线,而不是写一些更简单的东西,以我需要的方式满足我的要求(部署是一个重要的考虑因素.

有人有想法吗?

.net message-queue servicebus

6
推荐指数
1
解决办法
1604
查看次数

jboss.jms和jboss.mq有什么区别?

类org.jboss.jms.server.destination.QueueService和org.jboss.mq.server.jmx.Queue之间有什么区别?

java jboss jms message-queue jboss-messaging

6
推荐指数
1
解决办法
2911
查看次数

帮助我了解消息排队的工作原理

已经使用PHP已经有一段时间了,我想知道整个"消息队列"是什么.我们以facebook为例.我可以更新我的状态但是我必须向所有朋友显示状态更新(假设我有3000个关注者).如果有评论则需要更多工作,并且必须通过电子邮件通知所有留下评论的朋友.通过我看到的示例,似乎所有消息队列都采用"消息"(我的状态更新)并将其放入一些临时空间(文件系统或数据库表).然后我有一个cron工作,把它拉出来并更新我的表.

话虽如此,我该如何处理这些数据呢?我想我对这将如何真正帮助我感到困惑.如何将以下函数转换为消息队列,然后安排函数以后运行?

1 - 更新我的状态2 - 现在在我的页面和所有朋友中发布它.3 - 如果留下评论,现在将最新评论通过电子邮件发送给"订阅"该评论的人.

我的问题是,我该如何操纵这些数据?我只是插入"注释"然后有一个"工作",将该注释拉出来并将其插入一个处理它的函数?

这是我打算研究的一个例子.

http://www.freeopenbook.com/php-hacks/phphks-CHP-5-SECT-18.html

提前致谢.

php message-queue

6
推荐指数
1
解决办法
4539
查看次数

从ActiveMQ触发PHP

背景: 我们当前的系统涉及两个服务(一个用Java编写,另一个用PHP编写),它们使用HTTP回调相互通信.我们希望使用ActiveMQ(或其他,如果需要)从HTTP回调迁移到基于消息的体系结构.我们可能会使用STOMP在它们之间进行通信.最终,PHP服务将用Java重写,但这不是该项目的一部分.

问题: ActiveMQ系统如何通知PHP已将新消息发布到PHP系统订阅的队列?在当前系统中,回调固有地调用PHP并触发它.这消失了基于消息的架构.

可能的解决方案:

  • Cron定期调用一个检查新消息的PHP脚本.呸.
  • 一个长期运行的PHP进程,它循环并休眠并检查新消息.少呀?
  • 发布新消息时,ActiveMQ调用PHP脚本.好,怎么样?
  • ??

php java activemq-classic stomp message-queue

6
推荐指数
1
解决办法
3309
查看次数

Java可以与System V linux消息队列交互吗?

我需要将shell脚本(从基于linux的app调用)的信息传递给java应用程序.

命名管道很痛苦,因为我不能在不考虑对管道读/写端的复杂影响的情况下启动/停止任何一项服务.

套接字很难,因为如果重新启动监听过程,就没有排队机制,简单的实现需要不断创建新的套接字(否则shell脚本会因check-and-restart-socket和排队代码而变得非常复杂).

我最近正在阅读这些System V/POSIX linux消息队列.我正在运行Fedora 12,并想知道是否有一种很好的方法来配置这些消息队列并从Java进行交互.

java linux shell message-queue

6
推荐指数
1
解决办法
2215
查看次数

MessageConsumer不消费消息

我的应用程序在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)

java jms message-queue java-ee jboss7.x

6
推荐指数
1
解决办法
6515
查看次数

邮件队列内容存储在哪里?

在使用POSIX消息队列时,我注意到文件系统上创建了一些文件,其名称是我创建队列.我的问题:

Q1.消息队列是否将硬盘上的消息排队,而不是RAM?

Q2.如果是这样,那么在实施中它是否应该非常慢,因为它涉及HardDisk?


编辑:

我在"Linux编程接口 "一书中读到了这一点:

在Linux上,POSIX消息队列在虚拟文件系统中实现为i节点,消息队列描述符和打开消息队列描述分别实现为文件描述符和打开文件描述.但是,这些是SUSv3不需要的实现细节,并且在某些其他UNIX实现上不适用.

即使它是VFS,它仍然存储在HardDisk上,对吧?

记住这些信息,现在有人可以评论第二个问题吗?(和/或第一个也有更多要添加的东西)

linux message-queue posix-api

6
推荐指数
1
解决办法
4609
查看次数

通过消息传递进行通信的软件模块的"多进程"与"单进程多线程"

我们需要构建一个软件框架(或中间件),以便在单个机器上运行的不同软件组件(或模块)之间实现消息传递.该框架将提供以下功能:

  • 模块之间的通信是通过"消息传递".
  • 每个模块都有自己的消息队列和消息处理程序线程,它将同步处理每个传入消息.

根据上述要求,以下哪种方法是正确的(有其推理)?:

  1. 将模块实现为进程,并通过共享内存进行消息传递
  2. 在单个进程中将模块实现为线程,并通过将消息对象推送到目标模块的消息队列来进行消息传递.

有消息来源,有一些明显的缺点和优点:

  • 在Option-2中,如果一个模块导致分段错误,则该过程(因此整个应用程序)将崩溃.并且一个模块可以直接访问/改变另一个模块的内存,这可能导致难以调试的运行时错误.
  • 但是使用Option-1,您需要处理需要通信的模块刚刚崩溃的状态.如果软件中有N个模块,则系统中可能存在2 ^ N个活动/崩溃状态,这些状态会影响模块上运行的算法.
  • 同样在Option-1中,发送方不能假设接收方已收到消息,因为它可能在那一刻崩溃了.(但是系统可以警告所有模块特定模块已经崩溃;这样,发送方可以断定接收方将无法处理该消息,即使它已成功接收到该消息)

我赞成Option-2,但我不确定我的论点是否足够稳固.你有什么看法?

编辑:根据要求澄清,这里有更多的规格细节:

  • 这是一个将在Linux OS上运行的嵌入式应用程序.
  • 不幸的是,我无法告诉你项目本身,但我可以说项目有多个组件,每个组件都将由自己的团队(3-4人)开发,并决定这些组件之间的通信组件/模块是通过某种消息传递框架.
  • C/C++将用作编程语言.
  • "模块接口API"将自动提供给模块开发人员的是:(1)消息/事件处理程序线程循环,(2)同步消息队列,(3)函数指针成员变量,您可以在其中设置消息处理函数.

multithreading middleware message-queue multiprocessing inter-process-communicat

6
推荐指数
2
解决办法
8379
查看次数

PHP中的Message Queue

我开发了一个rest api,它接受一些数据并将其存储在消息队列(Redis List)中.现在从redis这个数据被推送到MySQL数据库.问题是客户端需要等到数据写入mysql.

我希望客户端应该等到数据写入消息队列(Redis List),并且将数据推送到MySQL的函数应该异步执行.我该怎么做 ?我的整个代码库都是用PHP编写的,所以我更喜欢用PHP编写代码.

我读过这个,但没试过.

PHP中使用Redis的分布式队列示例

我很困惑如何执行slave.php(在链接中提到).我的意思是当一条新消息到达队列时,slave.php将如何找到它.

我不想为此使用cronjob.相反,当新消息到达时,slave.php应该异步执行.怎么做?

php asynchronous message-queue redis

6
推荐指数
1
解决办法
1万
查看次数

Amazon SQS:两个当前消费者使用相同的消息

我有四个当前的消费者在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)之前或之后执行自动确认?

java jms message-queue amazon-sqs amazon-web-services

6
推荐指数
2
解决办法
3006
查看次数