RabbitMQ 教程(二)本地数据交互

1、部署好RabbitMQ环境后,咱们能够来简单写代码调用。建立两个Console程序,分别命名为:RabbitMQ.Server、RabbitMQ.Clientapi

(1)netFreamework须要4.5及以上版本,而且项目中要引用 RabbitMQ.Client.dll,RabbitMQ.ServiceModel.dlltcp

如须要dll的,能够到此下载(请支持下,谢谢):http://download.csdn.net/download/zmoneyz/9980207spa

 

(2)RabbitMQ.Server,负责发送信息,为方便理解,HostName就直接使用了localhost.net

var factory = new RabbitMQ.Client.ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())//建立Socket链接
{
    using (var channel = connection.CreateModel())//channel中包含几乎全部的api操做queue
    {
        //参数含义:队列名、是否持久化、排它性、是否自动删除
        channel.QueueDeclare(queue: "AllenLeeQueue",//队列名
                             durable: false,//是否持久化
                             exclusive: false,//排它性
                             autoDelete: false,//是否自动删除,一旦客户端链接断开则自动删除queue
                             arguments: null);////若是安装了队列优先级插件则能够设置优先级

        string message = "This morning i want to play Dota.....";
        var body = Encoding.UTF8.GetBytes(message);

        channel.BasicPublish("", "AllenLeeQueue", null, body);
        Console.WriteLine("AllenLee Sent Msg: {0}", message);
    }
}

Console.WriteLine(" Press 【Enter】 to exit.");
Console.ReadLine();

 

(3)RabbitMQ.Client,负责接收信息,HostName也为localhost插件

var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
     channel.QueueDeclare(
     queue: "AllenLeeQueue",//指定发送消息的queue,和生产者queue匹配
     durable: false,
     exclusive: false,
     autoDelete: false,
     arguments: null
     );

     var consumer = new EventingBasicConsumer(channel);

     string strMsg = "";
     //注册接收事件,一旦建立链接就去拉取消息
     consumer.Received += (model, ea) =>
     {
         var body = ea.Body;
         var message = Encoding.UTF8.GetString(body);
         strMsg = message;
         Console.WriteLine("AllenLee Received: {0}", message);
     };

     channel.BasicConsume(
         queue: "AllenLeeQueue",
         noAck: true,//和tcp协议的ack同样,为false则服务端必须在收到客户端的回执(ack)后才能删除本条消息
         consumer: consumer
     );

     Console.WriteLine(" Press 【Enter】 to exit.");
     Console.ReadLine();
} 

 

(4)运行RabbitMQ.Server,RabbitMQ.Clientcode

这两个没有必然的前后执行顺序,由于Client会一直要侦听检测服务端发来的信息,当Server端一旦有信息传来,Client就能够立刻Get到,下图是我先运行Client再运行Server的状况blog

 

(5)固然,也能够把一些通用变量往前提,看你我的爱好队列

private static ConnectionFactory factory = new ConnectionFactory() { HostName = "localhost" };至此,咱们已经完成简单的 RabbitMQ 的使用,后续咱们继续往深刻探讨,欢迎你们多提宝贵意见,谢谢!
相关文章
相关标签/搜索