RabbitMQ的基本使用到高级特性
时间:2022-05-06
本文章向大家介绍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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法
- Android手势左右滑动效果
- Android开发实现根据包名判断App运行状态的方法
- Android实现朋友圈多图显示功能
- Android实现朋友圈评论回复列表
- android调用webservice接口获取信息
- RecyclerView嵌套RecyclerView完美实现京东tab吸顶效果
- Android使用SmsManager实现短信发送功能
- Kotlin结合Rxjava+Retrofit实现极简网络请求的方法
- 用Android Studio3.0新功能加快构建速度
- Android实现图片添加阴影效果的2种方法
- Android Webview与ScrollView的滚动兼容及留白处理的方法
- Android AOP框架AspectJ使用详解
- android仿Adapter实现自定义PagerAdapter方法示例
- android绘制几何图形的实例代码