有人可以提供一些关于何时使用消息队列的经验法则以及它们应该解决的实际现实问题吗?
谢谢
我正在使用Carrot作为Django项目中的消息队列,并按照教程,它工作正常.但是这个例子在控制台中运行,我想知道如何在Django中应用它.我在models.py中从我的一个模型调用的发布者类,所以没关系.但我不知道在哪里放消费类.
因为它只是与.wait()坐在那里,我不知道我需要在什么时间或地点实例化它,以便它始终运行并监听消息!
谢谢!
我正在考虑使用SQLite作为"作业队列容器",并且想知道如何使用自定义C#(使用ADO.NET)来处理数据库.
如果这是SQL Server,我会设置一个可序列化的事务,以确保父行和子行完全是我的,直到我完成.我不确定这在SQLite中是如何工作的,任何人都可以提供任何帮助吗?
或者如果有任何其他现有的SQLite消息队列实现,我也很欣赏这方面的任何指针.
谢谢!
我有一个Excel宏需要很长时间.当我无人看管时,似乎崩溃了Excel(我在任务栏中收到了一条Not Responding消息),但是如果我设置一个每隔五或十秒就会被击中的断点,那就没关系了.麻烦的是,我需要从断点处继续大约25万次(我们要看大约200个小时来执行这个野兽)
我猜测缺少消息泵活动会对内核产生影响,那么我如何刷新消息队列呢?还是我完全吠叫错了树?
顺便说一下,我对此非常陌生,因此非常欢迎文档参考.
干杯,盖伊
我正在研究sql服务器服务代理作为我们应用程序的消息处理技术。
在我们的方案中,从一个客户端应用程序(WPF)发送的消息需要在服务代理中排队,其他客户端应用程序(android)会接收它们。消息是时间敏感的,接收者需要在消息被发送到队列后的“ X”分钟(例如2分钟)之内接收,如果到那时仍无法接收,则消息必须过期并从接收者中删除。队列。
有没有办法告诉服务代理在“ x”分钟后使消息超时?
编辑:添加了我用来测试此脚本。
CREATE DATABASE ServiceBrokerTest
GO
ALTER DATABASE ServiceBrokerTest SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE
GO
/****** Object: MessageType [SampleMsgType] ***/
CREATE MESSAGE TYPE [SampleMsgType] AUTHORIZATION [dbo] VALIDATION = NONE
GO
/****** Object: ServiceContract [MsgContract] ******/
CREATE CONTRACT [MsgContract] AUTHORIZATION [dbo] ([SampleMsgType] SENT BY INITIATOR)
GO
/****** Object: ServiceQueue [dbo].[Queue1] ******/
CREATE QUEUE [dbo].[Queue1] WITH STATUS = ON , RETENTION = OFF , POISON_MESSAGE_HANDLING (STATUS = ON) ON [PRIMARY]
GO
/****** Object: BrokerService [MsgService] ******/
CREATE …Run Code Online (Sandbox Code Playgroud) 我试图让一个简单的JMS"Hello world"应用程序运行.我想在JBoss Application Server 7上试一试,但我无法运行它.作为HornetQ的Jboss嵌入其中,我使用以下命令启动它:
standalone.bat --server-config=standalone-preview.xml
Run Code Online (Sandbox Code Playgroud)
我认为问题很可能是我在JBoss中配置队列的方式.这是我做的步骤.
Quene名称:testQueue JNDI名称:queue/test
队列配置有一个"选择器"选项.这可以留空,如果没有,这个领域会发生什么?
这是我用作发件人的代码.我现在不担心接收器,因为我只想先开始发送消息.
package jms.ex3;
import javax.naming.InitialContext;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.QueueSender;
import javax.jms.DeliveryMode;
import javax.jms.QueueSession;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
public class Sender
{
public static void main(String[] args) throws Exception
{
// get the initial context
InitialContext ctx = new InitialContext();
// lookup the queue object
Queue queue = (Queue) ctx.lookup("queue/test");
// lookup the queue connection factory
QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.
lookup("queue/connectionFactory");
// create …Run Code Online (Sandbox Code Playgroud) 我知道db-xx.log是日志文件而db.redo是参考文件?
db-xx.log存储尚未使用的消息.消费后,这些消息将从db-xx.log中删除.db.redo按消息ID存储消息的引用(存储在db-xx.log中).
我的理解是代理首先将消息存储在缓存(易失性存储器)中,然后在检查点或缓存大小已满时将这些消息移动(附加)到db-xx.log.
谢谢
我正在使用NServiceBus进行一些例子,我偶然发现了一个我希望搭载MassTransit的功能(因为它是免费服务).
该功能基于"中毒"消息.
如果由于系统中的错误而导致这些消息无法处理,并永久停留在错误队列中.
NServiceBus有一个很酷的功能,一旦你纠正了代码中的错误,就可以将错误队列中的那些消息" 重定向 "到原始工作队列,然后重新传递.
这是通过使用NServiceBus特定工具完成的: - ReturnToSourceQueue.exe.
MassTransit是否有针对此类问题的类似工具?
或者是否有另一种可用的解决方法,最好是与RabbitMQ一起使用.
我需要为IBM MQ编写简单的Java客户端.使用WebSphere MQ classes for Java(com.ibm.mq.jar)而不是使用WebSphere MQ classes for JMS(jms.jar)在Java中编写MQ客户端有什么好处?
根据这里,GetMessage()是一个阻塞调用,直到可以从消息队列中检索到消息时才会返回.
那么,这种阻止行为是如何实现的呢?
是否GetMessage()使用某种自旋锁,以便UI线程只是忙等待消息队列中出现的新消息?如果是这样,我想至少有一个CPU核心应该在UI应用程序运行时具有很高的使用率.但我没有看到这种情况发生.那么它是怎样工作的?
感谢评论中的提示.自旋锁意味着降低线程上下文切换的成本.它不应该在这里使用.我也想过这里可能会使用一些事件范例.但如果它是事件驱动的,那么这个事件模型是如何工作的?
我的猜测是这样的:
我想其他一些东西也可能基于定时器中断,例如线程上下文切换.
根据目前为止的答复.UI线程等待一些事件对象.但是由于UI线程在等待某些东西,它不活跃,并且它本身无法做任何事情.事件对象只是一些被动状态信息.因此,必须有其他人在事件状态更改时唤醒线程.我认为它应该是线程调度程序.并且线程调度器可以由定时器中断脉冲.
线程调度程序将定期检查事件状态并唤醒线程并根据需要将消息放入其队列中.
我对整个情况是否正确?
还有一个问题是:谁修改了事件对象的状态?基于此处,事件似乎只是一些可由任何活动方修改的数据结构.我认为线程调度程序只是使用线程和事件之间的关系来决定运行哪个线程.
当一个线程被安排运行时,它的所有要求都应该已经完成.诸如消息应该在它等待的事件被引发之前被放入其队列中.这是合理的,否则可能为时已晚.(感谢RbMm的评论.)
在JDK中,LinkedBlockingDeque类型也为该take()方法提供了类似的阻塞行为.
检索并删除此双端队列表示的队列的头部(换句话说,此双端队列的第一个元素),必要时等待,直到元素可用.
.NET对应的是BlockingCollection <T>类型.一个讨论它的线程.
这是一个关于如何在C#中实现阻塞队列的线程.