background preloader

Message Queues

Facebook Twitter

SQL Server Service Broker. SQL Server Service Broker provides native support for messaging and queuing applications in the SQL Server Database Engine. This makes it easier for developers to create sophisticated applications that use the Database Engine components to communicate between disparate databases.

Developers can use Service Broker to easily build distributed and reliable applications. Application developers who use Service Broker can distribute data workloads across several databases without programming complex communication and messaging internals. This reduces development and test work because Service Broker handles the communication paths in the context of a conversation. Messages can be sent to multiple target services (multicast) The syntax of the SEND (Transact-SQL) statement has been extended to enable multicast by supporting multiple conversation handles.

Queues expose the message enqueued time Queues have a new column, message_enqueue_time, that shows how long a message has been in the queue. About Messages and Message Queues. Unlike MS-DOS-based applications, Windows-based applications are event-driven. They do not make explicit function calls (such as C run-time library calls) to obtain input.

Instead, they wait for the system to pass input to them. If a top-level window stops responding to messages for more than several seconds, the system considers the window to be not responding. In this case, the system hides the window and replaces it with a ghost window that has the same Z order, location, size, and visual attributes. This section discusses the following topics: Windows Messages The system passes input to a window procedure in the form of a message. The system sends a message to a window procedure with a set of four parameters: a window handle, a message identifier, and two values called message parameters. Message parameters specify data or the location of data used by a window procedure when processing a message.

Message Types This section describes the two types of messages: System-Defined Messages. An Introduction to SQL Server Service Broker. Roger Wolter February, 2005 Updated June 2005 Applies to: Microsoft SQL Server 2005 Service Broker Summary: This paper introduces Service Broker, a new feature in Microsoft SQL Server 2005. With Service Broker, internal or external processes can send and receive guaranteed, asynchronous messaging by using extensions to Transact-SQL. (7 printed pages) Contents Introduction With Service Broker, a feature in Microsoft SQL Server 2005, internal or external processes can send and receive guaranteed, asynchronous messages by using extensions to Transact-SQL Data Manipulation Language (DML).

To better understand Service Broker, familiarity with the key concepts of queues, dialogs, conversation groups, and activation is helpful. Queues Service Broker uses queues to provide loose coupling between the message sender and the message receiver. Queues permit a lot of scheduling flexibility. Dialogs Service Broker implements dialogs, which are bidirectional streams of messages between two endpoints. Asynchronous procedure execution. Code on GitHub: rusanu/async_tsql Update: a version of this sample that accepts parameters is available in the post Passing Parameters to a Background Procedure Recently an user on StackOverflow raised the question Execute a stored procedure from a windows form asynchronously and then disconnect?.

This is a known problem, how to invoke a long running procedure on SQL Server without constraining the client to wait for the procedure execution to terminate. Most times I’ve seen this question raised in the context of web applications when waiting for a result means delaying the response to the client browser.

On Web apps the time constraint is even more drastic, the developer often desires to launch the procedure and immediately return the page even when the execution lasts only few seconds. This problem is perfectly addressed by Service Broker Activation. I’m going to use a table to store the result of the procedure execution. Next we’re going to create the service and queue we need. Using MSMQ when you already have SQL Server and BizTalk. Msmq - Writing to SQL Server using MessageQueue from web application.

MSMQ as buffer for SQL Server Inserts. Posting Message to MSMQ from SQL Server. Accessing MSMQ from Microsoft SQL Server. The Problem Sometimes you have to send/receive data using MSMQ from Microsoft SQL Server. Although Microsoft SQL Server 2005 uses MSMQ for replication jobs, there is no functionality in T-SQL to access MSMQ. Let's fill the gap! Analysis We have the following solutions: Extended stored procedures - this is an old way to deal with these kind of tasks. You have to write a C++ DLL containing methods that will be called from T-SQL. I'm sure that the first two solutions can be found on the Internet, so we won't deal with them.

The Solution Every piece of code you will see below is in the source package for this article, all T-SQL scripts are in the SqlMSMQRegister.sql file. Assembly Let's see through the .NET assembly source code. Queue - SqlString with queue path, e.g. myhost\private$\queue1 msg - SqlString with the content of the message. SqlString type is a .NET equivalent of the SQL Server nvarchar type, so for the sake of simplicity, this implementation assumes text messages in MSMQ queues.

MsQueue.vbs - Monitor a Microsoft Message Queue (MSMQ) on a Windows operating system. ActiveXperts Network Monitor ships with a powerful set of pre-defined checks. Each individual check has a static number of configuration items. To monitor other items, or to combine monitoring items, you can make use of custom VBScript checks. Most of the built-in checks have a VBScript equivalent, implemented as a Function in a VBScript (.vbs) file.

Out-of-the-box, each VBScript function monitors the same items as the built-in check. To add a new VBScript-based Microsoft Message Queue monitoring check, do the following: On the 'Monitor menu', click 'New Monitoring Check (VBScript)'. To customize the above monitoring check, click on the 'Edit button' next to the 'File selection box'. Msmb.vbs - Manage private MSMQ queues. ' ' use at your own risk. :) ' assuming that your default scripting engine is CScript.exe ' cscript //H:CScript ' Assuming administrator priviledges Option Explicit const MQ_RECEIVE_ACCESS = 1 const MQ_DENY_NONE = 0 const MQ_NO_TRANSACTION = 0 const MQ_MTS_TRANSACTION = 1 const MQ_SINGLE_MESSAGE = 3 const ForReading = 1 const TristateTrue = -1 const TristateFalse = 0 const g_receiveTimeout = 1000 Main public sub Main() dim action dim queueName dim isTransactional dim fileName dim machineName if WScript.Arguments.Count < 2 then WScript.Echo "Usage:" WScript.Echo " Administers *private* MSMQ queues.

WScript.Echo "" WScript.Echo " create queue:" WScript.Echo " cscript msmq.vbs /action:create /queue:%queuename% [/transactional:true/false]" WScript.Echo " cscript msmq.vbs /action:create /queue:%queuename%" WScript.Echo " delete queue:" WScript.Echo " cscript msmq.vbs /action:delete /queue:%queuename%" WScript.Echo " purge queue:" WScript.Echo " send message:" Wscript.Echo "" else end if end sub.

VBScript MSMQ Dead-Letter Quueue Count. Monitoring MSMQ via vbs. So a while ago I wrote a simple vbs to query MSMQ as the PerfMon counters are not reliable. There is an updated script I did some ware just need to dig it out. Option Explicit Dim MSMQApp ' As MsmqApplication Set MSMQApp = CreateObject("MSMQ.MSMQApplication") Dim strComputer If Wscript.Arguments.Count = 0 Then WScript.Echo "usage: msmq.vbs server_name queue " WScript.Echo " " WScript.Echo "e.g. cscript msmq.vbs tus1ev1idxpin01 queue" Else strComputer = Wscript.Arguments(0) END If On Error Resume Next MSMQApp.Machine=strComputer.

VBScript Code Example: Opening a Queue. To open a queue you must set the queue's access mode and its share mode. This example opens a queue to send messages. The queue's access and share modes are set to MQ_SEND_ACCESS and MQ_DENY_NONE, respectively. The following procedure lists the steps for opening a known queue to send messages and close the queue (the code for sending messages is not included). To open a queue to send messages The following example opens a public queue with send access. To run this example, paste the following code into a text file that has an .asp extension (for example, mq.asp), and then place the file in the InetPub\Scripts folder on your Web server. This example can be run on computers using any version of MSMQ. <HTML><BODY><H1>Opening a public queue on a Web server</H1><% Set qinfo = Server.CreateObject ("MSMQ.MSMQQueueInfo") qinfo.PathName = ".

Sample VBS script for sending and recieving messages from MSMQ - DeveloperS. VB & Database, VB6 - SQLServer - MSMQ. Problems interacting between VB6 and .Net apps using MSMQ... Message count using WMI and VB6 for MSMQ 2. I didn't try VB6 code, but the attached scripts run fine on Win2k. Thanks, Doron--This posting is provided "AS IS" with no warranties, and confers no rights.. Post by Tony JuurlinkHello All,I've been trying to access Message Counts for MSMQ 2 queues... without muchluck.

Begin 666 msmqservice.wsf.txtM/%! A8VMA9V4^#0H\2F]B($E$/2)-4TU14V5R=FEC92(^#0H\4V-R:7! T(&QAM;F=U86=E/2)60E-CMM*0T*1&EM(&]B:G,-"E-E="! Begin 666 queues.wsf.txtM/%! Send Messages to a Queue from Visual Basic 6 getting error in Biztalk 2010. Hello, When I send a message to a Queue using VB6, and BizTalk 2010 takes it returning an error message: There was a failure executing the receive pipeline: "Microsoft.BizTalk.DefaultPipelines.XMLReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Source: "XML disassembler" Receive Port: "RcvIEM_AssignmentCreation_AW" URI: "FORMATNAME:DIRECT=OS:LOCALHOST\MQIEM_ASSIGNMENTCREATION_AW" Reason: No Disassemble stage components can recognize the data.

Visual Basic 6 Code: Dim objMSMQQueueInfo As MSMQ.MSMQQueueInfo Dim objMSMQQueue As MSMQ.MSMQQueue Dim objMSMQMessage As MSMQ.MSMQMessage 'Create the objects Set objMSMQQueueInfo = New MSMQ.MSMQQueueInfo Set objMSMQMessage = New MSMQ.MSMQMessage 'Specificate the Queue objMSMQQueueInfo.PathName = sMessageQueue 'Open the queue Set objMSMQQueue = objMSMQQueueInfo.Open(MQ_SEND_ACCESS, MQ_DENY_NONE) objMSMQMessage.Body = sGetMSMQMessageBodyString objMSMQMessage.send objMSMQQueue, MQ_NO_TRANSACTION. About Messages and Message Queues. Reliable Messaging with MSMQ and .NET. Duncan Mackenzie Microsoft Developer Network Revised February 2002 Summary: This article describes how to use recoverable messages, transactions (alone or combined with database transactions), and acknowledgements with MSMQ and the Microsoft .NET Framework. (30 printed pages) Download Bdadotnet_beta2.msi.

Contents IntroductionRecoverable MessagesTransactions Creating Transactional Queues Using Internal (MSMQ) Transactions Participating in External (DTC) TransactionsAcknowledgements, Time Outs, and Journaling Using Acknowledgements Setting Time Outs Using Journal QueuesConclusion Introduction In a previous article, Accessing Message Queues, you learned how to use .NET to send and receive messages using Microsoft Message Queuing (MSMQ). MSMQ is ideal for use in a variety of systems as a means of transferring data, but if you are going to use it as part of your system, it is critical that you understand how to make it reliable. Recoverable Messages Microsoft® Visual Basic® .NET Visual C# .NET. C# - The bare minimum needed to write a MSMQ sample application.

MSMQ Code Samples. Application Messaging This section provides examples of using the MSMQ interface with DATA step code to illustrate the semantics of sending a message to a queue and receiving the same message from the queue. Additional DATA step code examples are provided to show how to send and receive text files, as well as send and receive binary files. Please note that when a SAS DATA step ends, all resources consumed by this DATA step are automatically freed. That is, all internal SAS handles are automatically freed. When using the SAS Macro Language to interface with MSMQ, care should be taken to ensure that all resources are freed programmatically.

Sending a Message to a Queue This example sends a message to a queue. Receiving a Message From a Queue This example receives a message from a queue. Text File Processing Example This example shows how to put a text file on a queue. Getting a Text File From a Queue This example shows how to receive the first text file on a queue. Binary File Processing Example. Writing MSMQ Applications.

Application Messaging With MSMQ messaging, two or more applications communicate with each other indirectly and asynchronously using message queues. The applications do not have to be running at the same time or even in the same operating environment. An application wishing to communicate with another application simply sends a message to a queue. The receiving application retrieves the message when it is ready.

A typical SAS program using MSMQ services performs the following tasks: A program must first either open an existing queue or create a new queue. A function is available to help find queues based on their property values. Note: MSMQ uses several different representations to identify a queue, such as format name, pathname, instance GUID, and queue handle. Using MSMQ with Microsoft Visual FoxPro 6.0. Randy Brown Microsoft Corporation September 1999 Summary: This article guides Visual FoxPro® developers through successfully writing Visual FoxPro code to access the Microsoft® Messaging Queue (MSMQ) COM objects directly.

Many tips and tricks specific to Visual FoxPro are scattered throughout the code samples. (37 printed pages) Contents IntroductionAll About MSMQFeatures of MSMQTerminology OverviewProgramming MSMQ with VFPBasic Queue OperationsBasic Message OperationsMessage AcknowledgmentsResponse MessagesAdvanced VFP Programming for MSMQWorking with MSMQ TransactionsGoing Forward Introduction Microsoft® Messaging Queue (MSMQ) is an exciting technology that every Visual FoxPro® developer can employ in his or her application. The first part of this document describes general MSMQ concepts that you need to know. In preparation for reading this article, you may want to first install MSMQ and read through the documentation. Www.microsoft.com/ntserver/appservice/exec/overview/MSMQ_Overview.asp.

Using Visual Basic toIntegrate MSMQ into Your Distributed Applications-- MSJ, May 1999. Sending and receiving message in MSMQ using C# Programming Best Practices with Microsoft Message Queuing Services (MSMQ)--Developer's Blog. Introduction to MSMQ. Sql server 2008 - move large numbers of records into msmq. TCP ports, UDP ports, and RPC ports that are used by Message Queuing. How To Configure a Firewall for MSMQ Access. GetMessage function. Microsoft Message Queuing. Queued Messages - Win32 Programmer's Reference. Windows - How does the message queue work in Win32.