作家
登录

如何优雅的使用RabbitMQ

作者: 来源: 2017-07-26 14:15:32 阅读 我要评论

RabbitMQ无疑是今朝最风行的消息队列之一,对各类说话情况的支撑也很丰富,作为一个.NET developer有须要进修和懂得这一对象。消息队列的应用处景大年夜概有3种:

1、体系集成,分布式体系的设计。各类子体系经由过程消息来对接,这种解决筹划也慢慢成长成一种架构风格,即“经由过程消息传递的架构”。

2、当体系中的同步处理方法严重影响了吞吐量,比如日记记录。假如须要记录体系中所有的用户行动日记,如不雅经由过程同步的方法记录日记势必会影响体系的响应速度,当我们将日记消息发送到消息队列,记录日记的子体系就会经由过程异步的方法去花费日记消息。

3、体系的高可用性,比如电商的秒杀场景。当某一时刻应用办事器或数据库办事器收到大年夜量请求,将会出现体系宕机。如不雅可以或许将请求转发到消息队列,再由办事器去花费这些消息将会使得请求变得安稳,进步体系的可用性。

一、开端应用RabbitMQ

RabbitMQ官网供给了具体的安装步调,别的官网还供给了RabbitMQ在六种场景的应用教程。个中教程1、3、6将覆盖99%的应用处景,所以正常来说只须要搞清跋扈这3个教程即可快速上手。

二、简单分析

我们以官方供给的教程1做个简单梳理:该教程展示了Producer若何向一个消息队列(message queue)发送一个消息(message),消息花费者(Consumer)收到该消息后花费该消息。

1、producer端:

  1. var factory = new ConnectionFactory() { HostName = "localhost" }; 
  2.  using (var connection = factory.CreateConnection()) 
  3.  { 
  4.      while (Console.ReadLine() != null
  5.      { 
  6.          using (var channel = connection.CreateModel()) 
  7.          { 
  8.              //创建一个名叫"hello"的消息队列 
  9.              channel.QueueDeclare(queue: "hello"
  10.                  durable: false
  11.                  exclusive: false
  12.                  autoDelete: false
  13.                  arguments: null); 
  14.   
  15.              var message = "Hello World!"
  16.              var body = Encoding.UTF8.GetBytes(message); 
  17.   
  18.              //向该消息队列发送消息message 
  19.              channel.BasicPublish(exchange: ""
  20.                  routingKey: "hello"
  21.                  basicProperties: null
  22.                  body: body); 
  23.              Console.WriteLine(
     1/5    1 2 3 4 5 下一页 尾页

      推荐阅读

      CVPR 2017论文解读:特征金字塔网络FPN

    论文:Feature Pyramid Networks for Object Detection论文地址:https://arxiv.org/abs/1612.03144这里介绍的文┞仿是来自 Facebook 的特点金字塔收集 Feature Pyramid Networks(FPN)。F>>>详细阅读


    本文标题:如何优雅的使用RabbitMQ

    地址:http://www.17bianji.com/lsqh/36412.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)