简介

继上一篇 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

最新文章

  1. 使用DeviceOne实现微信小程序功能
  2. oracle锁等级以及解锁
  3. KnockoutJS 3.X API 第七章 其他技术(6) 使用&ldquo;fn&rdquo;添加自定义函数
  4. Delphi日期函数、日期加减
  5. VM~Linux联不上网
  6. text-indent:2em详解
  7. Console中加入招聘等个性化信息
  8. 论文第5章:Android绘图平台的实现
  9. [SAP ABAP开发技术总结]程序自己以JOB方式运行
  10. JS实现星级评分
  11. SSH config
  12. 说说ajax上传数据和接收数据
  13. Cognos 11.0快速开发指南 Ⅰ
  14. [翻译]编写高性能 .NET 代码 第二章:垃圾回收 基本操作
  15. 第48章:MongoDB-备份和恢复
  16. js中的arguments
  17. 1705: 小明在工作(zzuli)
  18. loadrunner上传文件到网盘
  19. QT---事件系统
  20. linux 控制结构

热门文章

  1. 什么是 stack?- 每天5分钟玩转 Docker 容器技术(111)
  2. 串String(1):串的实现(定长顺序存储结构)
  3. SQL Server 文章目录
  4. ROS初探:(一)ROS架构
  5. SuperSocket 最基础入门
  6. css盒模型研究
  7. Cleaner, more elegant, and harder to recognize(翻译)
  8. Linux(CentOS7.1)修改默认yum源为国内的阿里云yum源
  9. Java企业微信开发_11_异常:java.net.UnknownHostException: qyapi.weixin.qq.com
  10. 总结oninput、onchange与onpropertychange事件的用法和区别