RabbitMQ c#
RabbitMQ是依赖于erlang环境,先安装erlang环境,在安装RabbitMQ全程不会有啥问题,安装完成后,RabbitMQ服务会自动启动起来,可以在服务中看到。
使用命令,需要切换到sbin文件夹目录
RabbitMQ用户配置:
得到所有用户:rabbitmqctl list_users
添加用户信息:rabbitmqctl add_user sa 123456
添加用户角色:rabbitmqctl set_user_tags sa administrator
启用RabbitMQ的界面管理命令:
rabbitmq-plugins enable rabbitmq_management
如果报错:None of the specified endpoints were reachable
则需要设置权限,检查防火墙。我的是没有权限:如下图
然后点击用户点击设置权限即可
回车,然后在浏览器打开安装机器的IP+15672端口
以下是代码操作:
//队列的相关操作================================
//数据入队
public static bool SendQueue(string queue, string json, string key = "")
{
CheckChannel(queue, key);
byte[] body = Encoding.UTF8.GetBytes(json);
dic[key].Item1.BasicPublish("", queue, dic[key].Item2, body);
bool result = dic[key].Item1.WaitForConfirms();
return result;
}
//从队列中取出数据
//接受封装,势必在引用地方都要引入rabbitmq包
public static string ReceiveQueue(string queue, string key = "")
{
CheckChannel(queue, key);
//autoAck:true表示,需要调用确认方法。false表示取出了就没有了
//channel.BasicAck(result.DeliveryTag, false);
BasicGetResult result = dic[key].Item1.BasicGet(queue, true);
if (result == null)
{
return null;
}
else
{
byte[] body = result.Body;
string msg = Encoding.UTF8.GetString(body);
return msg;
}
}
//验证连接对象
private static Dictionary<string, Tuple<IModel, IBasicProperties>> dic = new Dictionary<string, Tuple<IModel, IBasicProperties>>();
static void CheckChannel(string queue, string key = "")
{
if (!dic.ContainsKey(key))
{
ConnectionFactory factory = new ConnectionFactory();
factory.HostName = "localhost";
factory.UserName = "sa";
factory.Password = "123456";
//创建连接
IConnection connection = factory.CreateConnection();
IModel channel = connection.CreateModel();
//开启持久化
IBasicProperties properties = channel.CreateBasicProperties();
properties.DeliveryMode = 2;
//开启确认模式
channel.ConfirmSelect();
dic.Add(key, Tuple.Create<IModel, IBasicProperties>(channel, properties));
}
dic[key].Item1.QueueDeclare(queue, true, false, false, null);
}
踩坑,需要注意一点,多线程不能使用同一个IModel,不然跑着跑着会报一个错误出来,后面的空字符串参数是用来区别线程用的。
rabbitmq修改disc为ram模式命令,首先停止服务,不要停止服务里面的rabbitmq服务,开始命令
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
完成,修改disc模式也是,成功只会提示一行英文
Turning "xxxx" into a disc node
集群配置:
首先统一各个机器上的.erlang.cookie文件信息,注意,在win系统上有三个地方都需要修改,C:\Windows和C:\Users\Administrator还有C:\Windows\System32\config\systemprofile,你当前登录用户目录,这个文件默认是只读属性,改完记得改回来。
注意:如果一直报错:unable to connect to node rabbit@xxx :nodedown,保证cookie文件一直,最好全局搜索下C下这个文件即可.
然后修改hosts文件的东西,格式192.168.1.1 xxx,其中xxx为你的主机名,集群中的所有ip和主机名都要写在文件中,每个机器都是一样。
使用 -detached 参数运行各节点
rabbitmqctl stop
rabbitmq-server -detached
将当前集群加到node1节点中
rabbitmqctl stop_app
rabbitmqctl join_cluster [email protected]
rabbitmqctl start_app
然后就特么完事?就这几行命令,但是我相信一定一堆问题,我的集群成功了,但是在计算机服务中的服务显示没有启动,你去启动的时候会报错1067,然后集群还能照常使用,就这么简单,但是配置环境会出现各种各样的问题,我第二次练习还是不知道怎么把集群给搞成功的......
参考链接:http://88250.b3log.org/rabbitmq-clustering-ha
转载于:https://my.oschina.net/uwith/blog/1554086