21.05.2008, 01:25 | #1 |
Участник
|
So my day job has been keeping me very busy (which is never a bad thing)...
I have managed to delve a little deeper into message queues, and although documentation exists, it can be a little ambiguous. Here is what I have found... NAV and Message Queues WritePrivateQueue() CREATE(CC2); CREATE(MQBus); CC2.AddBusAdapter(MQBus,1); MQBus.OpenWriteQueue('.private$TestWriteQueue',0,0); MQBus.SenderAuthenticationLevel:= 2; OutMsg := CC2.CreateoutMessage('Message queue://.private$TestWriteQueue'); OutS := OutMsg.GetStream(); OutS.WRITE('Hello world! - WritePrivateQueue'); OutMsg.Send(0); Variables Name DataType Subtype MQBus Automation 'Navision MS-Message Queue Bus Adapter'.MSMQBusAdapter CC2 Automation 'Navision Communication Component version 2'.CommunicationComponent OutMsg Automation 'Navision Communication Component version 2'.OutMessage OutS OutStream The code above will write to a new private message queue on the local machine called: TestWriteQueue The message is called: Navision MSMQ-BA At the same time a message called: Navision MSMQ-BA is created in the public queue called: nsadminreceivequeue - not too sure what this one does or is as it is blank – it seems to be the admin queue used to deliver the message to the correct queue as it states – “The message reached the queue.” Receiving & Displaying MessagesOnRun() CREATE(MQBus); CREATE(CC2); CC2.AddBusAdapter(MQBus,1); MQBus.OpenReceiveQueue('.private$TestWriteQueue',0,0); CC2::MessageReceived(VAR InMessage : Automation "''.IDISPATCH") InMsg := InMessage; InS := InMsg.GetStream(); InS.READ(Txt); MESSAGE(Txt); InMsg.CommitMessage(); Name DataType Subtype Length MQBus Automation 'Navision MS-Message Queue Bus Adapter'.MSMQBusAdapter CC2 Automation 'Navision Communication Component version 2'.CommunicationComponent WITHEVENTS InMsg Automation 'Navision Communication Component version 2'.InMessage InS InStream Txt Text 100 This code will receive the message sent by WritePrivateQueue and then display the text in message in NAV. This codeunit must be running single instance so that it can respond to the event. WritePrivateQueueandReply() CREATE(CC2); CREATE(MQBus); CC2.AddBusAdapter(MQBus,1); MQBus.OpenWriteQueue('.private$TestWriteQueue',0,0); MQBus.OpenReplyQueue('.private$TestReadQueue',0,0); MQBus.SenderAuthenticationLevel:= 3; OutMsg := CC2.CreateoutMessage('Message queue://.private$TestWriteQueue'); OutS:= OutMsg.GetStream(); OutS.WRITE('Hello world! - WritePrivateQueueandReply'); InMsg:= OutMsg.SendWaitForReply(3000); IF ISCLEAR(InMsg) THEN MESSAGE('InMsg not received') ELSE BEGIN InS:= InMsg.GetStream(); InS.READ(Txt); MESSAGE(Txt); END; Variables Name DataType Subtype Length MQBus Automation 'Navision MS-Message Queue Bus Adapter'.MSMQBusAdapter CC2 Automation 'Navision Communication Component version 2'.CommunicationComponent OutMsg Automation 'Navision Communication Component version 2'.OutMessage OutS OutStream InMsg Automation 'Navision Communication Component version 2'.InMessage InS InStream Txt Text 100 The code above will write to a new private message queue on the local machine called: TestWriteQueue The message is called: Navision MSMQ-BA At the same time a message called: Navision MSMQ-BA is created in the public queue called: nsadminreceivequeue - not too sure what this one does or is as it is blank – it seems to be the admin queue used to deliver the message to the correct queue as it states – “The message reached the queue.” This time we wait for a response back after sending the machine. The system is not receiving the reply!!! <h4 style="MARGIN:auto 0cm;">Public/Private Queues</h4> A public queue is a queue that is registered in the directory service that any Message Queuing application can locate. Public queues are persistent. You can make a backup of their registration information, which makes them suitable for long-term use. A private queue is a queue that is registered on the local computer (not in the directory service) that other applications typically cannot locate. Private queues have the advantage of having no directory service overhead. This means that they are faster to create, there is no latency and no replication. Further, they can be created and deleted when the directory service is not working. Подробнее... http://dynamicsuser.net/blogs/nav2dotnet/a...age-queues.aspx
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|