我正在尝试扩展第三方应用程序,以便除了使用Windows窗体GUI(需要混合模式)之外,还可以通过命令行调用它.这是一个相当简单的程序,基本上加载一个文件然后你点击它开始发送UDP网络数据包的按钮.
我需要从另一个调用应用程序,并希望传入一个参数,并需要能够将ExitCode返回到调用应用程序.根据我的阅读,为了做到这一点,你需要添加编译器指令{APPTYPE CONSOLE}.
我做了这个,我的应用程序按照我的意愿工作,除了发送网络数据包减慢到爬行. 我发现每当我在表格上移动鼠标时.网络传输速率显着提高.我怀疑存在某种类型的Windows消息队列问题,移动鼠标是否会导致中断,从而导致消息队列被处理?
我已经google了一下,尝试在Timer中调用Application.ProcessMessages和PeekMessages,间隔为1ms,这根本没有用.我在本用户手册中找到了其他一些应用程序,它说APPYPE CONSOLE和GUI类型都支持Indy 10.坦率地说,这让我感到困惑,因为我认为所有网络库都可以在两种模式下工作......但就像我说我不熟悉Delphi一样.
我很肯定这个问题在我的应用程序中被隔离到一行,即是否包含{APPTYPE CONSOLE}.
有人有主意吗?
版本信息:
Delphi 7 Personal(Build 4.453)
Indy 9.0.4
我使用以下代码发送消息:
var transaction = new MessageQueueTransaction())
transaction.Begin( );
var message = new Message
{
Body = myContent,
Recoverable = true
};
m_oMessageQueue.Send( message , myTransaction );
transaction.Commit( );
Run Code Online (Sandbox Code Playgroud)
并使用a BeginRecieve和ReceiveCompleted事件处理程序接收它.
如果我的事件处理程序在调用之前失败EndRecieve,那么该消息是否应保留在队列中并且可用于后续的接收调用?我看到的行为是消息永远消失了.(或者可能会有超时,之后它会再次出现?)
更新接收消息的代码如下所示.
var messageQueue = new MessageQueue( myPath );
messageQueue.ReceiveCompleted += messageQueue_ReceiveCompleted_ThrowException;
messageQueue.BeginReceive();
Run Code Online (Sandbox Code Playgroud)
出于测试目的,我在messageQueue_ReceiveCompleted_ThrowException事件处理程序中抛出异常.
然后我用一个工作事件处理程序重复上面的代码,但我没有被调用.
关于HornetQ我几乎没有问题:
HornetQ核心API和JMS API有什么区别?
使用其中之一有什么优点或缺点?
如果我使用核心API然后我决定更改我的消息总线(让我们说ActiveMQ)然后我必须更改所有代码,这是真的吗?
任务是实现我自己的线程安全的消息队列.
我的方法:
public class MessageQueue {
/**
* Number of strings (messages) that can be stored in the queue.
*/
private int capacity;
/**
* The queue itself, all incoming messages are stored in here.
*/
private Vector<String> queue = new Vector<String>(capacity);
/**
* Constructor, initializes the queue.
*
* @param capacity The number of messages allowed in the queue.
*/
public MessageQueue(int capacity) {
this.capacity = capacity;
}
/**
* Adds a new message to the queue. If the …Run Code Online (Sandbox Code Playgroud) 这里有一些我目前的设置.
我不确定我喜欢消费者一直在运行,因为每个消费者使用大约300MB的Ram(我认为它是MB,现在不在我面前)而且我正在寻找另一个实现.
M <-- Message coming from REST API
|
|
+-First Queue
|
|
| <-- The Exchange
/|\
/ | \
/ | \ <-- bind to multiple queues ( 20+ )
Q1 Q2 Q3 <-- Each Queue is a task that must be completed
| <-- CRON runs to check if all queues above have completed
|
|
Q4 <-- Queues 1,2 and 3 must finish first before Queue 4 can …Run Code Online (Sandbox Code Playgroud) 我找不到关于BodyType-Property(在MSDN旁边)的任何信息,特别是关于每个整数的含义.所以我使用BodyTypes = 0 ... 1000创建了消息,并将结果写入Excel工作表.我希望这对某人有帮助.
对于Windows服务,我需要一个计时器来定期执行某项任务.当然,有许多选项似乎优于计时器(多线程,直接从服务的主线程调用方法),但它们在这种特定情况下都有它们的缺点.
但是,由于显而易见的原因,如果没有GUI的消息队列,SetTimer()将无法工作.我所做的(在Free Pascal中)是以下内容:
创建计时器:
MyTimerID := SetTimer(0, 0, 3333, @MyTimerProc);
Run Code Online (Sandbox Code Playgroud)
在服务的主循环中,运行计时器队列:
procedure TMyServiceThread.Execute;
var
AMessage: TMsg;
begin
repeat
// Some calls
if PeekMessage(AMessage, -1, WM_TIMER, WM_TIMER, PM_REMOVE) then begin
TranslateMessage(AMessage);
DispatchMessage(AMessage);
end;
// Some more calls
TerminateEventObject.WaitFor(1000);
until Terminated;
end;
Run Code Online (Sandbox Code Playgroud)
最后,杀掉计时器:
KillTimer(0, MyTimerID)
Run Code Online (Sandbox Code Playgroud)
除了KillTimer总是返回False,这按预期工作.
我对你的反馈很感兴趣,但是,如果我的实现是正确的 - 我只是想避免弄乱其他应用程序的消息以及我不知道的其他副作用,因为我对消息处理经验不足.
谢谢!
我一直在阅读2013年4月推出的事件驱动消息编程模型,OnMessageOptions.ExceptionReceived 事件,内置RetryPolicy(2013年5月,RetryPolicy.Default),瞬态故障处理应用程序块(2011)已过时等等(见下).
我一直在监视通过消息泵收到的异常错误,我每天都会收到MessagingCommunicationExceptions.此文章(更新日期:2014年9月16日),提出以下建议:
此异常表示当无法成功建立从消息传递客户端到Service Bus基础结构的连接时可能出现的通信错误.在大多数情况下,如果存在网络连接,则可以将此错误视为瞬态错误.客户端可以尝试重试导致此类异常的操作.还建议您验证域名解析服务(DNS)是否可操作,因为此错误可能表示无法解析目标主机名.
我的理解是,在版本2.1(2013)之后,没有额外的代码可用于处理服务总线上的瞬态错误.除非我的前提是错误的,为什么我每天都会收到瞬态错误?是否应忽略通过消息泵收到的异常?如果忽略,我只能假设意外的异常也会被忽略..我当然不希望这种情况发生.
Microsoft.ServiceBus的版本是2.4.0.0
同样感兴趣:从1.x的升级Windows Azure的服务总线2.0 -重试政策,介绍了Windows Azure的服务总线事件驱动的消息编程模型,是什么在Azure的SDK 2.0版本(2013年4月)的新功能,什么是新Service Bus 2.1版本(2013年5月),瞬态故障处理.
在linux上,编写了一个简单的程序来创建一个POSIX消息队列,并向它发送一个msg,在进程终止后,似乎msg仍然存在.
问题是:
我正在尝试使用node.js与Tibco EMS服务器进行交互,并且很好奇是否可以仅在node.js中使用完全开源的解决方案来实现。我不想使用Tibco的Web消息解决方案。
因此,这带给我们... Tibco EMS是否使用AMQP之类的标准协议?我可以通过原始tcp套接字与之交谈吗?我曾考虑过设置Java服务来简单地处理消息路由,但是理想情况下,我希望整个解决方案都在node.js中。我只需要能够连接到不同的队列并入队/出队消息。谢谢!
message-queue ×10
delphi ×2
msmq ×2
amqp ×1
azure ×1
c ×1
c# ×1
concurrency ×1
delphi-7 ×1
freepascal ×1
hornetq ×1
indy ×1
ipc ×1
java ×1
linux ×1
node.js ×1
php ×1
posix ×1
properties ×1
queue ×1
rabbitmq ×1
retrypolicy ×1
tibco-ems ×1
timer ×1
winapi ×1