The previous article has talked about RABBITMQ how to install the Windows platform, and do not know how to install friends, please see my previous articles: RABBITMQ Learning Series One: Under Windows installation RABBITMQ Services, today to talk about the real development of C # in the process, how to call With RABBITMQ.
First, the client
RabbitMQ has a lot of client APIs that are very useful. We are on the side, has been using EASYNETQ, so the demo here only describes the EASYNETQ client implementation. Other clients, let's study it by ourselves.
EASYNETQ is an easy-to-use RABBITMQ. NET Client API. Address: http://easynetq.com/. Demo sample Download.
II. Structure of the project
Description: As we mentioned earlier, RABBITMQ consists of Producer (generator) and Consumer (consumer). Weiz.consumer is Consumer (consumer), Weiz. Producer is Producer (generator), WEIZ.MQ is a generic processing class library for Message Queuing.
Iii. Construction of the project
1. WEIZ.MQ Project , a generic processing class library for Message Queuing, is used for both subscribed and published messages.
1. EASYNETQ related components via NuGet installation project (slightly)
2. Add BusBuilder.cs pipeline creation class, mainly responsible for linking RABBITMQ.
usingSystem;usingSystem.Configuration;usingeasynetq;namespaceweiz.mq{/// <summary> ///Message Server Connector/// </summary> Public classBusbuilder { Public StaticIBus Createmessagebus () {//Message Server connection string//var connectionString = configurationmanager.connectionstrings["RabbitMQ"]; stringConnString ="host=192.168.98.107:5672;virtualhost=orderqueue;username=zhangweizhong;password=weizhong1988"; if(connstring = =NULL|| ConnString = =string. Empty) {Throw NewException ("messageserver connection string is missing or empty"); } returnRabbithutch.createbus (connstring); } }}
View Code
3. Add Iprocessmessage class, define a message method for message passing
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace weiz.mq{ publicinterface iprocessmessage { void processmsg (Message msg);} }
View Code
4. Add a message class that defines information such as entity attribute fields for messaging
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceweiz.mq{ Public classMessage { Public stringMessageID {Get;Set; } Public stringMessageTitle {Get;Set; } Public stringMessageBody {Get;Set; } Public stringMessagerouter {Get;Set; } }}
View Code
5. Add the Mqhelper class for the subscribing and publishing messages that are in progress.
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Configuration;usingeasynetq;namespaceweiz.mq{ Public classMqhelper {/// <summary> ///Send Message/// </summary> Public Static voidPublish (Message msg) {////Create message busIBus bus =Busbuilder.createmessagebus (); Try{bus. Publish (msg, x=x.withtopic (Msg. Messagerouter)); } Catch(Easynetqexception ex) {//handling Connection Message Server exceptions} bus. Dispose ();//similar to database connection, remember to destroy bus objects after use } /// <summary> ///Receiving Messages/// </summary> /// <param name= "msg" ></param> Public Static voidSubscribe (Message msg, iprocessmessage ipro) {////Create message busIBus bus =Busbuilder.createmessagebus (); Try{bus. Subscribe<Message> (Msg. Messagerouter, message = ipro. PROCESSMSG (message), x =x.withtopic (Msg. Messagerouter)); } Catch(Easynetqexception ex) {//handling Connection Message Server exceptions } } }}
View Code
2. Rabbitmq by Producer (creator)
1. Create an ASPX page and add the following code
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingsystem.web;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingweiz.mq;namespaceweiz.producer{ Public Partial classTestMQ:System.Web.UI.Page {protected voidPage_Load (Objectsender, EventArgs e) { } protected voidButton1_Click (Objectsender, EventArgs e) {Message msg=NewMessage (); Msg. MessageID="1"; Msg. MessageBody=DateTime.Now.ToString (); Msg. MessageTitle="1"; Msg. Messagerouter="Pcm.notice.zhangsan"; Mqhelper.publish (msg); } }}
View Code
3. Weiz.consumer is Consumer (consumer)
1. New OrderProcessMessage.cs
using System; using System.Collections.Generic; using System.Linq; using system.web; namespace weiz.consumer{ publicclass orderprocessmessage:mq. Iprocessmessage { publicvoid processmsg (MQ. Message msg) { Console.WriteLine (msg. MessageBody); }}}
View Code
2. Program add the following code
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceweiz.consumer{classProgram {Static voidMain (string[] args) {Orderprocessmessage Order=NewOrderprocessmessage (); Mq. Message msg=NewMQ. Message (); Msg. MessageID="1"; Msg. Messagerouter="Pcm.notice.zhangsan"; Mq. Mqhelper.subscribe (msg, order); } }}
View Code
Four, the operation
1. Start Weiz.consumer (consumer), start the consumer, and automatically create the relevant exchange and queue on the RABBITMQ server.
Consumer the consumer, using the Subscribe (subscription) mode, the Weiz.consumer client starts, automatically creates connection, and generates the relevant exchange and queue.
2. Start Weiz. Producer the testmq.aspx page, write a message to the queue. Subscribers are immediately able to get the message.
At this point, C # sends a message to the RABBITMQ message queue that has been simply completed.
View RABBITMQ Series other articles, http://www.cnblogs.com/zhangweizhong/category/855479.html
RabbitMQ Learning Series (iii): How C # uses RabbitMQ