当前位置: 首页 > news >正文

武汉交友什么网站建设外链优化

武汉交友什么网站建设,外链优化,网站关键词作用,桂林视频网站制作上节讲了 RabbitMQ下载安装教程 , 本节主要介绍RabbitMQ的持久化和简单使用。 一、RabbitMQ消息持久化 当处理一个比较耗时得任务的时候,也许想知道消费者(consumers)是否运行到一半就挂掉。在当前的代码中,当RabbitM…

上节讲了 RabbitMQ下载安装教程 , 本节主要介绍RabbitMQ的持久化和简单使用。

一、RabbitMQ消息持久化

        当处理一个比较耗时得任务的时候,也许想知道消费者(consumers)是否运行到一半就挂掉。在当前的代码中,当RabbitMQ将消息发送给消费者(consumers)之后,马上就会将该消息从队列中移除。此时,如果把处理这个消息的工作者(worker)停掉,正在处理的这条消息就会丢失。同时,所有发送到这个工作者的还没有处理的消息都会丢失。

        当RabbitMQ Server 关闭或者崩溃,那么里面存储的队列和消息默认是不会保存下来的。如果要让RabbitMQ保存住消息,需要在两个地方同时设置:需要保证队列和消息都是持久化的。

首先,要保证RabbitMQ不会丢失队列,所以要做如下设置:

bool durable = true;
channel.QueueDeclare("hello", durable, false, false, null);

虽然在语法上是正确的,但是在目前阶段是不正确的,因为我们之前已经定义了一个非持久化的hello队列。RabbitMQ不允许我们使用不同的参数重新定义一个已经存在的同名队列,如果这样做就会报错。现在,定义另外一个不同名称的队列:

bool durable = true;
channel.queueDeclare("task_queue", durable, false, false, null);

queueDeclare 这个改动需要在发送端和接收端同时设置。
现在保证了task_queue这个消息队列即使在RabbitMQ Server重启之后,队列也不会丢失。 然后需要保证消息也是持久化的, 这可以通过设置IBasicProperties.SetPersistent 为true来实现:

var properties = channel.CreateBasicProperties();
properties.SetPersistent(true);

需要注意的是,将消息设置为持久化并不能完全保证消息不丢失。虽然他告诉RabbitMQ将消息保存到磁盘上,但是在RabbitMQ接收到消息和将其保存到磁盘上这之间仍然有一个小的时间窗口。 RabbitMQ 可能只是将消息保存到了缓存中,并没有将其写入到磁盘上。持久化是不能够一定保证的,但是对于一个简单任务队列来说已经足够。如果需要消息队列持久化的强保证,可以使用publisher confirms

二、RabbitMQ的简单使用介绍 

在使用RabitMQ之前,先对几个概念做一下说明,

RabbitMQ是一个消息代理。他从消息生产者(producers)那里接收消息,然后把消息送给消息消费者(consumer)在发送和接受之间,他能够根据设置的规则进行路由,缓存和持久化。

一般提到RabbitMQ和消息,都用到一些专有名词。

  • 生产(Producing)意思就是发送。发送消息的程序就是一个生产者(producer)。我们一般用"P"来表示:
  • 队列(queue)就是邮箱的名称。消息通过你的应用程序和RabbitMQ进行传输,它们只能存储在队列(queue)中。 队列(queue)容量没有限制,你要存储多少消息都可以——基本上是一个无限的缓冲区。多个生产者(producers)能够把消息发送给同一个队列,同样,多个消费者(consumers)也能从同一个队列(queue)中获取数据。队列可以画成这样(图上是队列的名称):
  • 消费(Consuming)和获取消息是一样的意思。一个消费者(consumer)就是一个等待获取消息的程序。我们把它画作"C"

通常,消息生产者,消息消费者和消息代理不在同一台机器上。 

1、生产者

首先创建名为ProjectSend的控制台项目,需要引用RabbitMQ.Client.dll。这个程序作为Producer生产者,用来发送数据:

static void Main(string[] args){var factory = new ConnectionFactory();factory.HostName = "localhost";//RabbitMQ服务在本地运行factory.UserName = "guest";//用户名factory.Password = "guest";//密码using (var connection = factory.CreateConnection()){using (var channel = connection.CreateModel()){channel.QueueDeclare("hello", false, false, false, null);//创建一个名称为hello的消息队列string message = "Hello World"; //传递的消息内容var body = Encoding.UTF8.GetBytes(message);channel.BasicPublish("", "hello", null, body); //开始传递Console.WriteLine("已发送: {0}", message);          Console.ReadLine();}}}

        首先,需要创建一个ConnectionFactory,设置目标,由于是在本机,所以设置为localhost,如果RabbitMQ不在本机,只需要设置目标机器的IP地址或者机器名称即可,然后设置前面创建的用户名和密码。
        紧接着要创建一个Channel,如果要发送消息,需要创建一个队列,然后将消息发布到这个队列中。在创建队列的时候,只有RabbitMQ上该队列不存在,才会去创建。消息是以二进制数组的形式传输的,所以如果消息是实体对象的话,需要序列化和然后转化为二进制数组。
        现在客户端发送代码已经写好了,运行之后,消息会发布到RabbitMQ的消息队列中,现在需要编写服务端的代码连接到RabbitMQ上去获取这些消息。 

2、消费者

创建名为ProjectReceive的控制台项目,引用RabbitMQ.Client.dll。作为Consumer消费者,用来接收数据:

static void Main(string[] args){var factory = new ConnectionFactory();factory.HostName = "localhost";factory.UserName = "guest";factory.Password = "guest";using (var connection = factory.CreateConnection()){using (var channel = connection.CreateModel()){channel.QueueDeclare("hello", false, false, false, null);var consumer = new EventingBasicConsumer(channel);channel.BasicConsume("hello", false, consumer);consumer.Received += (model, ea) =>{var body = ea.Body;var message = Encoding.UTF8.GetString(body); Console.WriteLine("已接收: {0}", message);   };Console.ReadLine(); }}}

和发送一样,首先需要定义连接,然后声明消息队列。要接收消息,需要定义一个Consume,然后在接收消息的事件中处理数据。

3、管理工具 

也可以在web管理界面查看此queue的相关信息:

小结:

        本文简单介绍了消息队列的相关概念,并介绍了RabbitMQ消息代理的基本原理以及在Windows 上如何安装RabbitMQ和在.NET中如何使用RabbitMQ。消息队列在构建分布式系统和提高系统的可扩展性和响应性方面有着很重要的作用,希望本文对您了解消息队列以及如何使用RabbitMQ有所帮助。

 

http://www.wooajung.com/news/33436.html

相关文章:

  • 智能建造考研方向seo项目培训
  • 专业网站优化网站seo培训
  • 好的网站或网页推荐百度搜索引擎的网址是
  • 蒙牛网站是谁做的朋友圈的广告推广怎么弄
  • 商标注册网址seo的外链平台有哪些
  • 做网站三剑客深圳网络推广服务公司
  • 有多少种做网站后台程序爱站网站长seo综合查询
  • 常用网站如何在桌面做快捷方式跟我学seo
  • 南宁网站建设推荐q479185700顶上六安seo
  • 做网站 做手机app要学什么小红书推广策略
  • 360网站怎么做网址链接网络营销课程培训课程
  • .net网站封装百度交易平台
  • 大香蕉网站人人做搜索引擎优化包括哪些内容
  • 网站支付体现功能怎么做什么是搜索引擎营销
  • 珠海网站建设知识东莞服务好的营销型网站建设
  • 做外贸相关的网站个人网站模板免费下载
  • 公司网站维护费 入什么科目俄罗斯搜索引擎浏览器
  • 番禺建设局网站sem模型
  • 做贵网站多少钱牡丹江网站seo
  • 漫画网站开发源码杭州seo软件
  • 郑州市建设局官方网站金花关键词工具
  • 武汉网站制作 费用搜索引擎 磁力吧
  • 卖机械设备什么网站做推广好百度广告买下的订单在哪里找
  • 2018年做网站赚钱连云港seo优化
  • 东莞网约车驾驶员资格证网上报名太原seo外包平台
  • 日本有个做二十四节气照片的网站成功的软文推广
  • 小型b2c网站东莞今日头条最新消息
  • 哪个网站可以做记录视频培训平台
  • 上海建筑建材业门户网站百度新闻网站
  • 电子商务是什么专业杭州上城区抖音seo有多好