RabbitMQ的基本使用到高级特性
简介
继上一篇 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的基本使用到高级特性的更多相关文章
- 消息队列——RabbitMQ的基本使用及高级特性
文章目录 一.引言 二.基本使用 1. 简单示例 2. work queue和公平消费消息 3. 交换机 三.高级特性 1. 消息过期 2. 死信队列 3. 延迟队列 4. 优先级队列 5. 流量控制 ...
- RabbitMQ(二):RabbitMQ高级特性
RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.作为一名合格的开发者,有必要了解一下相关知识,RabbitMQ(一)已经入门RabbitMQ,本文介绍Rabb ...
- RabbitMQ实战(三)-高级特性
0 相关源码 1 你将学到 如何保证消息百分百投递成功 幂等性 如何避免海量订单生成时消息的重复消费 Confirm确认消息.Return返回消息 自定义消费者 消息的ACK与重回队列 限流 TTL ...
- 消息中间件——RabbitMQ(七)高级特性全在这里!(上)
前言 前面我们介绍了RabbitMQ的安装.各大消息中间件的对比.AMQP核心概念.管控台的使用.快速入门RabbitMQ.本章将介绍RabbitMQ的高级特性.分两篇(上/下)进行介绍. 消息如何保 ...
- 消息中间件——RabbitMQ(八)高级特性全在这里!(下)
前言 上一篇消息中间件--RabbitMQ(七)高级特性全在这里!(上)中我们介绍了消息如何保障100%的投递成功?,幂等性概念详解,在海量订单产生的业务高峰期,如何避免消息的重复消费的问题?,Con ...
- Rabbitmq之高级特性——百分百投递消息&消息确认模式&消息返回模式实现
rabbitmq的高级特性: 如何保障消息的百分之百成功? 要满足4个条件:生产方发送出去,消费方接受到消息,发送方接收到消费者的确认信息,完善的消费补偿机制 解决方案,1)消息落库,进行消息状态打标 ...
- RabbitMQ简介、安装、基本特性API--Java测试
新的阅读体验地址:http://www.zhouhong.icu/post/141 本篇文章所有的代码:https://github.com/Tom-shushu/Distributed-system ...
- ActiveMQ中的Destination高级特性(一)
---------------------------------------------------------------------------------------- Destination ...
- Python3学习(二)-递归函数、高级特性、切片
##import sys ##sys.setrecursionlimit(1000) ###关键字参数(**关键字参数名) ###与可变参数不同的是,关键字参数可以在调用函数时,传入带有参数名的参数, ...
随机推荐
- IDEA热部署(一)---解析关键配置。
本编博客转载自:因为自己在研究热部署,包括热部署那些文件,部署实现的包括那些操作.这一块,所以这篇好博客. http://www.mamicode.com/info-detail-1699044.ht ...
- 管道设计CAD系统中重量重心计算
管道设计CAD系统中重量重心计算 eryar@163.com Abstract. 管道设计CAD系统中都有涉及到重量重心计算的功能,这个功能得到的重心数据主要用于托盘式造船时方便根据重心设置吊装配件. ...
- 中文颜色名称与RGB颜色对照表
中文颜色名称颜色对照表 鸨色 #f7acbc 赤白橡 #deab8a 油色 #817936 绀桔梗 #444693 踯躅色 #ef5b9c 肌色 #fedcbd 伽罗色 #7f7522 花色 #2b4 ...
- JavaScript闭包基本概念
闭包的概念 维基百科中是这么解释闭包的: 计算机科学中,闭包(也称为词法闭包或函数闭包)是指一个函数或函数的引用,与一个引用环境绑定在一起.这个函数环境是一个存储该函数每个非局部变量(也叫自由变量)的 ...
- JAVA Socket编程(二)之TCP通信
基于TCP(面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send ...
- mvc中signalr实现一对一的聊天
Asp.net MVC中实现即时通讯聊天的功能.前几天刚写了一片基础入门的教程,今天就来实现一下使用signaIr实现一对一的聊天的功能,对于这种场景也是即时通讯最基本功能.好吧废话不多说.先来看一下 ...
- ArcGIS 网络分析[2.2] 服务区分析
什么是服务区? 我们先提一个很常见的社会现象:一个医院,如果要发起抢救,那么10分钟内能去多远? 时间就是生命,当结合道路网的阻力进行最短路径分析时,得到的可达的覆盖区域,这个区域就是服务区. 服务区 ...
- bzoj 3531: [Sdoi2014]旅行
Description S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰. ...
- jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别详细讲解 ----转载
1.(function($) {-})(jQuery); 1).原理: 这实际上是匿名函数,如下: function(arg){-} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写 ...
- Windows zip安装MySQL
1. mysqld初始化时my.ini的第二个默认位置是%windir%/my.ini rem 1.查看此变量对应的目录,在此目录下编辑 my.ini,mysqld会自动找到 echo %WINDIR ...