zoukankan      html  css  js  c++  java
  • RabbitMQ 教程(二)本地数据交互

    一、部署好RabbitMQ环境后,我们可以来简单写代码调用。创建两个Console程序,分别命名为:RabbitMQ.Server、RabbitMQ.Client

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

    如需要dll的,可以到此下载(请支持下,谢谢):http://download.csdn.net/download/zmoneyz/9980207

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

    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.Client

    这两个没有必然的先后执行顺序,因为Client会一直要侦听检测服务端发来的信息,当Server端一旦有信息传来,Client就可以马上Get到,下图是我先运行Client再运行Server的情况

    (5)当然,也可以把一些通用变量往前提,看你个人爱好

    private static ConnectionFactory factory = new ConnectionFactory() { HostName = "localhost" };

    至此,我们已经完成简单的 RabbitMQ 的使用,后续我们继续往深入探讨,欢迎大家多提宝贵意见,谢谢!
  • 相关阅读:
    Python学习笔记:重复索引处理方法
    爬虫学习笔记:8684公交路线
    爬虫学习笔记:创建随机UserAgent池
    Python学习笔记:pandas.to_csv设置encoding='utf8sig'解决中文乱码问题
    Python学习笔记:利用pd.assign新增一列
    查看端口
    进程与线程的一个简单解释
    设计模式工厂方法模式(Factory Method)
    Java抽象类与接口的区别
    十个JDBC的最佳实践
  • 原文地址:https://www.cnblogs.com/AllenLee/p/7569619.html
Copyright © 2011-2022 走看看