自己在windows安装rabbitmq时,遇到了很多坑,最恶心的就是版本不匹配的问题,所以自己写了一篇总结,本文章安装的Erlang为8.2,rabbitmq为3.5.6

1 安装rabbitmq,因为rabbitmq使用Erlang所编写的,所以先装好Erlang的环境,安装好之后,配置环境变量

下载好之后,双击直接安装,下一步就行了(链接: https://pan.baidu.com/s/1QINySLYjVdouIDXAvDfKvg 提取码: nv9m)

配置环境变量,就是Erlang的安装目录,将%ERLANG_HOME%\bin加入到path中

做好之后,我们在cmd中输入erl,显示出版本号,我们的Erlang就安装好了。

2 安装rabbitmq,下载地址(链接: https://pan.baidu.com/s/1GqzYnbHpzsT3cnhLFRb15g 提取码: cf2x),下载完成后,

打开CMD命令,cd到安装目录(..\rabbitmq_server-3.5.6\sbin)下,然后在后面输入rabbitmq-plugins enable rabbitmq_management命令进行安装,访问http://localhost:15672。用户名和密码都是guest

rabbitmq服务的启动和关闭 

管理员权限打开cmd,然后切换到sbin目录下,执行

net stop RabbitMQ && net start RabbitMQ

如果不使用命令行方式,在任务管理器--服务中,找到RabbitMQ,右击停止或开始

3配置rabbitmq用户权限

RabbitMQ是存在用户权限的,默认是guest 密码也是guest,隶属于Administrator管理员下。现需要配置新用户和权限,继续打开CMD命令,cd到安装目录sbin下:

用户操作指令:

查询服务状态
rabbitmqctl status 列举虚拟主机列表
rabbitmqctl list_vhosts
列举用户列表
rabbitmqctl list_users 添加用户和密码
rabbitmqctl add_user hxf 123000hxf 设置权限
rabbitmqctl set_permissions hxf ".*" ".*" ".*" 分配用户组
rabbitmqctl set_user_tags hxf administrator 删除guest用户
rabbitmqctl delete_user guest
修改用户密码
rabbitmqctl change_password {username} {newpassowrd}

  

4.通过Nuget添加RabbitMQ.Client引用,操作队列

  创建两个控制台实现一个producer发送消息,一个consumer接收消息,并在控制台打印出来。

    producer

    首先,需要创建一个ConnectionFactory,设置目标,由于是在本机,所以设置为localhost,如果RabbitMQ不在本机,只需要设置目标机器的IP地址或者机器名称即可,然后设置前面创建的用户名hxf和密码123000hxf。

    紧接着要创建一个Channel,如果要发送消息,需要创建一个队列,然后将消息发布到这个队列中。在创建队列的时候,只有RabbitMQ上该队列不存在,才会去创建。消息是以二进制数组的形式传输的,所以如果消息是实体对象的话,需要序列化和然后转化为二进制数组。

static void Main(string[] args)
{
var factory = new ConnectionFactory();
factory.HostName = "localhost";
factory.UserName = "hxf";
factory.Password = "123000hxf"; using (var connection = factory.CreateConnection())
{
//创建一个消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。类似与Hibernate中的Session
//AMQP协议规定只有通过channel才能指定AMQP命令,所以仅仅在创建了connection后客户端还是不能发送消息的,必须要创建一个channel才行
//RabbitMQ建议客户端线程之间不要共用Channel,至少要保证共用Channel的线程发送消息必须是串行的,但是建议尽量共用Connection
using (var channel = connection.CreateModel())
{
//创建一个queue(消息队列)
channel.QueueDeclare("hello", false, false, false, null);
string message = "Hello World";
var body = Encoding.UTF8.GetBytes(message);
// 往队列中发出一条消息 使用了默认交换机并且绑定路由键(route key)与队列名称相同
channel.BasicPublish("", "hello", null, body);
//Console.WriteLine(" set {0}", message);
string message1 = "Hello World1";
var body1 = Encoding.UTF8.GetBytes(message1);
channel.BasicPublish("", "hello", null, body1);
string message2 = "Hello World2";
var body2 = Encoding.UTF8.GetBytes(message2);
channel.BasicPublish("", "hello", null, body2);
}
}
}

    /* CreateConnection 创建一个连接连接到broker
    CreateModel 创建一个channel 使用它来发送AMQP指令
    ExchangeDeclare 创建一个exchange 对消息进行路由
    QueueDeclare 创建一个queue 消息队列 这是一个装载消息的容器
    QueueBind 把exchange和queue按照路由规则绑定起来
    BasicPublish 往队列中发送一条消息
    BasicConsume 从队列中获取一条消息*/

注意:1.队列只会在它不存在的时候创建,多次声明并不会重复创建。2.信息的内容是字节数组,也就意味着可以传递任何数据。

使用rabbitmqctl 的list_queues可以查看所有的消息队列

  consumer

using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false,null);
//创建事件驱动的消费者类型,尽量不要使用while(ture)循环来获取消息
EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" 我是消费者我接收到消息: {0}", message);
};
channel.BasicConsume("hello", true, consumer);

exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。

本文中由于使用了默认交换机所以并没有用到 ExchangeDeclare和 QueueBind两个方法

默认交换机实际上是一个由消息代理预先声明好的没有名字(名字为空字符串)的直连交换机。它有一个特殊的属性使得它对于简单应用特别有用处:那就是每个新建队列(queue)都会自动绑定到默认交换机上,绑定的路由键(routing key)名称与队列名称相同

												

.net使用rabbitmq安装操作的更多相关文章

  1. RabbitMQ安装以及简单操作应用(针对Windows和C#)

    1.RabbitMQ安装 1.1下载并安装Erlang https://www.erlang.org/downloads 一直点next就安装好了.我直接使用了默认的安装目录.否则的话,应该需要配置一 ...

  2. RabbitMQ学习系列(二): RabbitMQ安装与配置

    上一篇,简单介绍了RabbitMQ的情况还有一些相关的概念,这一篇,会讲讲 RabbitMQ安装与配置. 1.安装 Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装RabbitM ...

  3. RabbitMQ安装配置

    安装RabbitMQ windows下的安装是非常简单的,我们需要准备两个东西 erlang的环境  下载windows和与之对象的操作系统位数安装包 http://www.erlang.org/do ...

  4. RabbitMQ安装和配置

    RabbitMQ: MQ:message queue.MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来 ...

  5. RabbitMQ安装与初始配置

    [TOC] 本文只讨论linux下的Rabbitmq安装. Erlang安装 rabbitmq依赖于Erlang,需先安装,推荐安装rabbitmq/erlang-rpm: #clone源码 git ...

  6. Windows下RabbitMQ安装及入门

    1.Windows下安装RabbitMQ需要以下几个步骤 (1):下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang. ...

  7. RabbitMQ安装使用详解

    1.下载相应的版本安装:http://www.rabbitmq.com/download.htmleg:http://www.rabbitmq.com/releases/rabbitmq-server ...

  8. Ubuntu 16.04 RabbitMq 安装与运行(安装篇)

    Ubuntu 16.04 RabbitMq 安装与运行(安装篇) 2018年08月15日 15:05:24 我跟吴彦祖四六开 阅读数:1966   前言 目前公司用阿里云 + redis 的方式实现的 ...

  9. RabbitMQ安装手册

    1.   下载 下载地址:http://www.rabbitmq.com/download.html 2.   windows下安装 2.1.  安装Erlang 下载:http://www.erla ...

随机推荐

  1. C语言运算符详解

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本章将逐一介绍算术运 ...

  2. 最全的 eclipse web 项目目录结构以及Tomcat的各个目录的作用

    本文会尽可能对 java web 项目的目录结构做出最详细的解释,尽量做到浅显易懂. eclipse web 项目目录结构   java web 项目事例 03-springmvc-drien-xgq ...

  3. GO:go语言介绍

    什么是go语言 Google开源 编译型语言 21世纪的C语言 go开发团队: go的特点 语法简洁 开发效率高 执行性能好 发展现状 最近新兴的行业公司一般会使用go语言作为主要开发语言 容器虚拟化 ...

  4. National Contest for Private Universities (NCPU), 2019 C Boxes(双向链表)

    题目中的要求如果x在y的左边,不需要移动,x在y的右边,2操作不需要移动. 有一个问题是,如果x与y相邻,这时的swap操作变成了三个而不是四个,这点尤其需要注意,不然就会死循环.注意x是和y相邻,这 ...

  5. 【CSS选择器】

    " 目录 一.介绍 二.语法 三.引入方式 1. 行内样式 2. 嵌入式 3. 外部样式 四.选择器 1. 基本选择器 2. 组合选择器 3. 属性选择器 4. 不常用选择器 5. 分组和嵌 ...

  6. jquery-1.10.2_d88366fd.js和jquery-3.1.0.min.js 在用touch事件时候, event.changedTouches[0]报错的问题。

    1.animation动画:(注意如果这个动画是一开始就执行的,在pc端就要用px,在手机端用rem,如果在pc端展示页面,但用的是rem为单位,这时候动画一开始就执行,因为根字体大小还没准备好,动画 ...

  7. 关注Ionic底部导航按钮tabs在android情况下浮在上面的处理

    Ionic是一款流行的移动端开发框架,但是刚入门的同学会发现,Ionic在IOS和android的底部tabs显示不一样.在安卓情况下底部tabs会浮上去. 如下图展示:  网上也有很多此类的解决方案 ...

  8. python匿名函数与三元运算

      匿名函数 匿名函数就是不需要显示式的指定函数名 首先看一行代码: def calc(x,y): return x*y print(calc(2,3)) # 换成匿名函数 calc = lambda ...

  9. 「JSOI2012」玄武密码

    「JSOI2012」玄武密码 传送门 题目是要求多个串在母串上的最长匹配长度. 考虑 \(\text{AC}\) 自动机,我们建出 \(\text{Trie}\) 图然后用母串来在上面跑. 每一个能匹 ...

  10. photoshop下载(ps)

    https://pan.baidu.com/s/1bNrUod2n1VqsA7Fr9RHtsg