简介

继上一篇 CentOS上安装RabbitMQ讲述RabbitMQ具体安装后,这一篇讲述RabbitMQ在C#的使用,这里将从基本用法到高级特性的使用讲述。

前序条件

这里需要增加一个用户,并且设置用户为administrator,更多命令可以参考RabbitMQ更多命令,这里开始我本来是想用guest用户,端口是:15672,但是在创建连接的时候是连接不上的,查资料后发现是必须开放5672端口,并且不能使用guest默认用户

rabbitmqctl add_user allen pwd   //增加用户
rabbitmqctl set_user_tags allen administrator //设置用户权限
rabbitmqctl change_password allen newpass //修改密码

开启5672端口

firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --reload

基本用法

连接之前可以看到,rabbitmq的UI界面是没有连接的

send发布者的代码

    /// <summary>
/// 发送消息
/// </summary>
public class Send
{
private static readonly string appID = ConfigurationManager.AppSettings["AppID"]; static void Main(string[] args)
{
var factory = new ConnectionFactory { Uri = ConfigurationManager.AppSettings["RabbitMQUri"] };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
string queue = string.Format("MQ{0}.BaseStudy", appID); channel.QueueDeclare(queue, false, false, false, null); //定义一个队列 while (true)
{
Console.Write("请输入要发送的消息:");
var message = Console.ReadLine();
var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish("", queue, null, body); //发送消息 Console.WriteLine("已发送的消息: {0}", message);
}
}
}
}
}

RabbitMQUri,和AppID

<add key="AppID" value="150107"/>    <!--队列ID-->
<add key="RabbitMQUri" value="amqp://test_user:123456@111.231.204.119:5672/" /> <!--连接字符串-->

RabbitMQUri的Value相当于:

 <add key="RabbitMQ_HostName" value="111.231.204.119"/>
<add key="RabbitMQ_UserName" value="test_user"/>
<add key="RabbitMQ_Password" value="123456"/>
<add key="RabbitMQ_Port" value="5672"/>
<add key="RabbitMQ_VirtualHost" value="/"/>

未建立连接时:



建立连接后:



发送消息



可以看到RabbitMQ的UI管理界面的消息有:



receive消费者收到的消息:



receive的代码:

/// <summary>
/// 接收消息
/// </summary>
public class Receive
{
private static readonly string appID = ConfigurationManager.AppSettings["AppID"]; static void Main(string[] args)
{
var factory = new ConnectionFactory { Uri = ConfigurationManager.AppSettings["RabbitMQUri"] };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
string queue = string.Format("MQ{0}.BaseStudy", appID); channel.QueueDeclare(queue, false, false, false, null); //定义一个队列 Console.WriteLine("准备接收消息:"); var consumer = new EventingBasicConsumer(channel);
consumer.Received += (s, e) =>
{
var body = e.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine("接收到的消息: {0}", message);
};
channel.BasicConsume(queue, true, consumer); //开启消费者与通道、队列关联 Console.ReadLine();
}
}
}

如果遇到这种情况:

OperationInterruptedException: The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=530, text="NOT_ALLOWED - access to vhost 'test' refused for user 'allen'", classId=10, methodId=40, cause=

这是权限问题,尽管我们已经设置了allen用户为administrator管理员,也就是:用户‘allen’没有权限访问‘/’

解决方案:

#sudo rabbitmqctl list_users
列出用户权限
Listing users ...
allen [administrator]
guest [administrator]
#sudo rabbitmqctl set_permissions -p / allen '.*' '.*' '.*'

该命令使用户allen具有‘/’这个virtual host中所有资源的配置、写、读权限以便管理其中的资源

最后,附上源码地址,包括RabbitMQ的基本用法,发布订阅,高级特性DEMO

RabbitMQ的基本使用到高级特性的更多相关文章

  1. 消息队列——RabbitMQ的基本使用及高级特性

    文章目录 一.引言 二.基本使用 1. 简单示例 2. work queue和公平消费消息 3. 交换机 三.高级特性 1. 消息过期 2. 死信队列 3. 延迟队列 4. 优先级队列 5. 流量控制 ...

  2. RabbitMQ(二):RabbitMQ高级特性

    RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.作为一名合格的开发者,有必要了解一下相关知识,RabbitMQ(一)已经入门RabbitMQ,本文介绍Rabb ...

  3. RabbitMQ实战(三)-高级特性

    0 相关源码 1 你将学到 如何保证消息百分百投递成功 幂等性 如何避免海量订单生成时消息的重复消费 Confirm确认消息.Return返回消息 自定义消费者 消息的ACK与重回队列 限流 TTL ...

  4. 消息中间件——RabbitMQ(七)高级特性全在这里!(上)

    前言 前面我们介绍了RabbitMQ的安装.各大消息中间件的对比.AMQP核心概念.管控台的使用.快速入门RabbitMQ.本章将介绍RabbitMQ的高级特性.分两篇(上/下)进行介绍. 消息如何保 ...

  5. 消息中间件——RabbitMQ(八)高级特性全在这里!(下)

    前言 上一篇消息中间件--RabbitMQ(七)高级特性全在这里!(上)中我们介绍了消息如何保障100%的投递成功?,幂等性概念详解,在海量订单产生的业务高峰期,如何避免消息的重复消费的问题?,Con ...

  6. Rabbitmq之高级特性——百分百投递消息&消息确认模式&消息返回模式实现

    rabbitmq的高级特性: 如何保障消息的百分之百成功? 要满足4个条件:生产方发送出去,消费方接受到消息,发送方接收到消费者的确认信息,完善的消费补偿机制 解决方案,1)消息落库,进行消息状态打标 ...

  7. RabbitMQ简介、安装、基本特性API--Java测试

    新的阅读体验地址:http://www.zhouhong.icu/post/141 本篇文章所有的代码:https://github.com/Tom-shushu/Distributed-system ...

  8. ActiveMQ中的Destination高级特性(一)

    ---------------------------------------------------------------------------------------- Destination ...

  9. Python3学习(二)-递归函数、高级特性、切片

    ##import sys ##sys.setrecursionlimit(1000) ###关键字参数(**关键字参数名) ###与可变参数不同的是,关键字参数可以在调用函数时,传入带有参数名的参数, ...

随机推荐

  1. 查看和删除chrome浏览器缓存内容

    平时用chrome开发更多,介绍一下如何清除和查看chrome浏览器的缓存内容,其他浏览器大同小异就不细说了 打开设置==>隐私设置和安全性==>内容设置==>cookie ==&g ...

  2. navicat创建存储过程、触发器和使用游标

    创建存储过程和触发器 1.建表 首先先建两张表(users表和number表),具体设计如下图: 2.存储过程 写一个存储过程,往users表中插入数据,创建过程如下: 代码如下: BEGIN #Ro ...

  3. mongodb副本集配置

    需要用到mongodb的时候单个实例肯定是不行的,挂了怎么办,那然后呢,跟mysql一样搞主从备份吗,是可以的mongodb这么弄,不过官网已经不推荐了这么干了,推荐使用副本集的模式,然后数据再大一点 ...

  4. 为什么覆写equals()方法的时候总是要覆写hashcode()?

    要回答这个问题,我们应该先认识一下obj中的equals和hascode方法 1.equals()方法在obj中定义如下: public boolean equals(Object obj) { re ...

  5. <大话设计模式>笔记

    读完了<大话设计模式>这本书,收获很多,对程序设计有了很多新的理解.将每章模式的大概要点做了些笔记以备查阅,一些设计模式书读完也对其了解得不是很透彻,需要以后在实践中来不断地加深理解吧.读 ...

  6. 遍历map的几种方式

    1,平时开发中对map的使用很多,然后发现了很多map可能存在的各种问题:如HashMap 需要放置 1024 个元素,由于没有设置容量初始大小,随着元素不断增加,容量 7 次被迫扩大,resize ...

  7. spring boot使用profile来区分正式环境配置文件与测试环境配置文件

    转载请在页首注明作者与出处 一:前言 经常在开发的时候,项目中的配置文件,在个人开发的时候有一套配置文件,在测试环境有一套配置文件,在正式环境有一套配置文件,这个时候如果配置文件复杂,需要改的东西就特 ...

  8. php iconv 函数参数的区别

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/57 用户输入:英特尔® 酷睿™ i7处理器大显身手 case1 ...

  9. ubuntu16.04 查询ip,网关,dns信息

    用ifconfig命令只能查询ip,子网掩码信息,不能获取dns和网关信息 用下面命令即可查询 nmcli dev show

  10. LAMP第三部分php,mysql配置

    php配置 1. 配置disable_functiondisable_functions = eval,assert,popen,passthru,escapeshellarg,escapeshell ...