目录:

  一、什么是RabbitMQ

  二、RabbitMQ运用场景

  三、RabbitMQ优势及特点

  四、Centos7中Docker安装RabbitMQ

  五、.Net Core 中使用RabbitMQ


一、什么是RabbitMQ

RabbitMQ是什么? --"RabbitMQ是基于AMQP协议的队列服务",.

什么是AMQP?-- Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。

可以理解RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(也可以叫面向消息的中间件)

二、RabbitMQ运用场景

消息通讯—因为其本身就是基于AMQP协议的队列服务,也就可以用于单纯的消息通讯,实现点对点的消息通讯或者聊天。

提速提性能—异步处理,不需要及时同步处理并且比较耗时,减少请求响应时间

流量削峰—流量过大,应用容易挂掉,可使用队列来处理。

三、RabbitMQ优势及特点

可靠—RabbitMQ具有持久化,传输确认,发布确认等机制。保证了消息的安全性,一旦发送了消息,就算接收者接收不到,它也会保存信息,一直到接收者接收消息为止

复用性—RabbitMQ可以发送多种类型消息

异步处理(提速)—把消息传给中间件,中间件后续慢慢处理,同时也可达到削峰的效果

解耦--防止引入过多的API给系统的稳定性带来风险;调用方使用不当会给被调用方系统造成压力,被调用方处理不当会降低调用方系统的响应能力。


四、Centos7中Docker安装RabbitMQ

 如何在Linux中安装可以看前段时间的一篇文章--https://www.cnblogs.com/hulizhong/p/10702367.html

先拉取镜像(选择带有mangement的版本)

docker pull rabbitmq:management

然后查看镜像拉取情况

docker images

启动容器同时设置账号密码

docker run  --name=rabbit  -p : -p :  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin  -d  rabbitmq:management 

查看容器运行情况

docker ps

运行成功,然后我们就去浏览器看看能否访问ip:15672

然后输入刚刚输入的账号密码登入进去就可以查看消息队列的整体情况,到这里RabbitMQ已经安装好了,接下来我们看看如何在.Net Core中使用RabbitMQ.


五、.Net Core 中使用RabbitMQ

RabbitMQ使用的话可以分为三个步骤

1、 创建RabbitMQ的连接

  public class ConnectionMQ
{
/// <summary>
/// 创建MQ连接
/// </summary>
/// <returns></returns>
public static IConnection Connection()
{
//创建连接工厂
ConnectionFactory factory = new ConnectionFactory
{
UserName = “admin”,//用户名
Password =” admin”,//密码
HostName = “127.0.0.1”//rabbitmq ip
};
//创建连接
var connection = factory.CreateConnection();
return connection;
}
}

2、 RabbitMQ发送消息

   public class PushMQ
{
/// <summary>
/// 发送MQ消息
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="item"></param>
/// <param name="queueName"></param>
public static void SendMQ<T>(T item,string queueName)
{
string input = Newtonsoft.Json.JsonConvert.SerializeObject(item);
using (var channel = ConnectionMQ.Connection().CreateModel())
{
//声明一个队列
channel.QueueDeclare(
queue: queueName,//队列名称
durable: true,//队列是否持久化
exclusive: false,//是否排外的
autoDelete: false,//是否自动删除
arguments: null//消息什么时候自动
);
var sendBytes=Encoding.UTF8.GetBytes(input);
var properties = new BasicProperties();
properties.DeliveryMode = ;// 设置消息是否持久化,1: 非持久化 2:持久化
//发布消息
channel.BasicPublish(
exchange: "",
routingKey: queueName,
mandatory: true,
basicProperties: properties,
body: sendBytes);
}
}
}

在这里连接的ConnectionMQ.Connection().CreateModel()是可以进行重写的,自己定义如何去连接

3、 RabbitMQ接收消息

  public class ReceiveMQ
  {
/// <summary>
/// 接收MQ消息
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="func"></param>
/// <param name="queueName"></param>
public static void GetMQ<T>(Func<T,bool> func,string queueName)
{
//创建连接
var connection = ConnectionMQ.Connection();
//创建通道
var channel = connection.CreateModel();
//事件基本消费者
EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
//接收到消息事件
consumer.Received += (ch, ea) =>
{
var message = Encoding.UTF8.GetString(ea.Body);
try
{
var item = JsonConvert.DeserializeObject<T>(message);
func(item);
}
catch (Exception ex)
{
LogHelp.Error(ex);
}
//确认该消息已被消费
channel.BasicAck(ea.DeliveryTag, false);
};
//启动消费者 设置为手动应答消息
channel.BasicConsum、e(queueName, false, consumer);
}
}

4、查看消息

在这里我们发送消息,然后我们去ip+15672看看是否有未消费的消息。

发现有一条未消费的信息,队列名称是Test,正好是我们刚刚发送的消息。

然后我们去消费这一条信息,再次进入ip+15672看看

 

刚刚的一条消息的确被消费掉了。其中GetInfo方法可以穿插自己的很多的业务逻辑的处理。到这里也就简单的介绍了下如何在.Net Core中使用RabbitMQ,还有一些其他的属性必要之时都可以加入进来的。可以高度扩展的。

    欢迎大家扫描下方二维码,和我一起学习更多的知识

RabbitMQ的介绍及使用进阶(Docker+.Net Core)的更多相关文章

  1. RabbitMQ基础教程之使用进阶篇

    RabbitMQ基础教程之使用进阶篇 相关博文,推荐查看: RabbitMq基础教程之安装与测试 RabbitMq基础教程之基本概念 RabbitMQ基础教程之基本使用篇 I. 背景 前一篇基本使用篇 ...

  2. RabbitMQ的介绍与spring整合

    本文主要讲述的是个人参考官网及其他前辈博客,对RabbitMQ的一些理解与spring整个RabbitMQ. 一.RabbitMQ的介绍 1.1.什么是RabbitMQ RabbitMQ是一个由erl ...

  3. Rancher介绍安装以及对docker的管理

    原文:Rancher介绍安装以及对docker的管理 一.简介 Rancher是一个开源的企业级全栈化容器部署及管理平台.Rancher为容器提供一揽子基础架构服务:CNI兼容的网络服务.存储服务.主 ...

  4. RabbitMQ(四):使用Docker构建RabbitMQ高可用负载均衡集群

    本文使用Docker搭建RabbitMQ集群,然后使用HAProxy做负载均衡,最后使用KeepAlived实现集群高可用,从而搭建起来一个完成了RabbitMQ高可用负载均衡集群.受限于自身条件,本 ...

  5. .NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ Masstransit 介绍)--学习笔记

    2.6.6 RabbitMQ -- Masstransit 介绍 Masstransit 是什么 Quickstart 消息 Message Masstransit 是什么 Masstransit 是 ...

  6. [RabbitMQ]01. 在 Win10 下通过 Docker 安装

    目录 win10家庭版 win10专业版和企业版 1. 开启Hyper-v 2. 安装Toolbox工具 3. 运行安装文件 4. 启动docker 5. 安装rabbitmq 6. 网页访问rabb ...

  7. .Net RabbitMQ实战指南——RabbitMQ相关概念介绍

    什么是消息中间件 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串.JSON等,也可以很复杂,比如内嵌对象. 消息队列中间件(Message Queue Middl ...

  8. Docker+.Net Core 的那些事儿-1.准备工作

    1.下载centos 地址:https://www.centos.org/download/ 我使用的是DVD ISO,这么做的目的是为了在之后的docker填坑的路上,方便使用centos中Fire ...

  9. Docker+.Net Core 的那些事儿-2.创建Docker镜像

    1.从store.docker.com获取.net core镜像 docker pull microsoft/dotnet 2.创建一个.net core项目,并发布 在上篇文章结尾建立的工作目录下, ...

随机推荐

  1. SOFA 源码分析 — 调用方式

    前言 SOFARPC 提供了多种调用方式满足不同的场景. 例如,同步阻塞调用:异步 future 调用,Callback 回调调用,Oneway 调用. 每种调用模式都有对应的场景.类似于单进程中的调 ...

  2. 对cordova插件配置文件plugin.xml的理解

    1.配置文件表头包括了插件id,是用于唯一标识插件的.同时插件配置了一个插件名称. 2.这个文件从工作机制,也就是js代码一直到native的java插件代码工作分成两个流程.第一个流程是从代码到插件 ...

  3. 浅谈C++ STL中的优先队列(priority_queue)

    从我以前的博文能看出来,我是一个队列爱好者,很多并不是一定需要用队列实现的算法我也会采用队列实现,主要是由于队列和人的直觉思维的一致性导致的. 今天讲一讲优先队列(priority_queue),实际 ...

  4. 使用xshell链接虚拟机的方法

    给大家介绍一下虚拟机和Xshell5连接的基本配置1.安装虚拟机,跟着提示一步一步安装即可,注意添加镜像文件,虚拟机就完成了.2.下载一个Xshell5,安装好之后.要修改虚拟机的网卡状态    1) ...

  5. laravel5.4生成验证码

    laravel5.4生成验证码   总结:本篇博客介绍使用gregwar/captcha实现验证码的具体操作步骤,以及可能遇到的问题和解决办法. 转载请注明出处!!!本文地址:http://www.c ...

  6. Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载)

    Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载) 前言:任何一个平台也好,系统也好,挣钱养活团队这个是无可厚非的,那么对于一个生鲜B2B平台盈利模式( 查看:http://www.cn ...

  7. Python初级教程

    Python语言的特点 优点: - 简单 - 易学 - 免费,开源 - 高层语言 - 可移植性(可再多平台运行) - 解释性(不需要编译,可直接运行) - 面向对象 - 可扩展性(缺点:运行效率相对较 ...

  8. 简历HTML网页版

    <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...

  9. +function ($) { "use strict";}(window.jQuery);全面分析

    +function ($) { "use strict"; }(window.jQuery); 怎么理解? 匿名函数闭包 我们先来理一理函数表达式和函数声明的区别 函数表达式: 函 ...

  10. Javascript 进阶 面向对象编程 继承的一个例子

    Javascript的难点就是面向对象编程,上一篇介绍了Javascript的两种继承方式:Javascript 进阶 继承,这篇使用一个例子来展示js如何面向对象编程,以及如何基于类实现继承. 1. ...