1.Windows下安装RabbitMQ需要以下几个步骤

(1):下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang.org/downloads,双击.exe文件进行安装就好,安装完成之后创建一个名为ERLANG_HOME的环境变量,其值指向erlang的安装目录,同时将%ERLANG_HOME%\bin加入到Path中,最后打开命令行,输入erl,如果出现erlang的版本信息就表示erlang语言环境安装成功;


(2):下载RabbitMQ,下载地址:http://www.rabbitmq.com/,同样双击.exe进行安装就好(这里需要注意一点,默认的安装目录是C:/Program Files/....,这个目录中是存在空格符的,我们需要改变安装目录,貌似RabbitMQ安装目录中是不允许有空格的,我之前踩过这个大坑);

(3):安装RabbitMQ-Plugins,我的是3.6.*,发现不需要这一步,安装RabbitMQ.exe文件后会自动安装插件,3.6+的版本跳过该步,直接验证是否安装成功。这个相当于是一个管理界面,方便我们在浏览器界面查看RabbitMQ各个消息队列以及exchange的工作情况,安装方法是:打开命令行cd进入rabbitmq的sbin目录(我的目录是:E:\software\rabbitmq\rabbitmq_server-3.6.5\sbin),输入:rabbitmq-plugins enable rabbitmq_management命令,稍等会会发现出现plugins安装成功的提示,默认是安装6个插件,如果你在安装插件的过程中出现了下面的错误:

解决方法是:首先在命令行输入:rabbitmq-service stop,接着输入rabbitmq-service remove,再接着输入rabbitmq-service install,接着输入rabbitmq-service start,最后重新输入rabbitmq-plugins enable rabbitmq_management试试,我是这样解决的;

(4)安装成功验证。安装成功后,可以通过dos命令来查看是否真的安装成功且正常启动,因此cmd后输入以下命令:-- 定位到rabbitmq的安装路径:

-- 上述命令回车后接着输入rabbitmqctl status,回车后出现下面一坨的即说明安装没有问题:

-- 此时,已经可以通过http://127.0.0.1:15672/ 地址来访问web管理界面了,默认的账户和密码均是 guest。

(5):插件安装完之后,在浏览器输入http://localhost:15672进行验证,你会看到下面界面,输入用户名:guest,密码:guest你就可以进入管理界面,当然用户名密码你都可以变的;

2.安装完RabbitMQ之后,我们先来简单了解下RabbitMQ中涉及到的几个概念

producer:消息生产者

consumer:消息消费者

virtual host:虚拟主机,在RabbitMQ中,用户只能在虚拟主机的层面上进行一些权限设置,比如我可以访问哪些队列,我可以处理哪些请求等等;

broker:消息转发者,也就是我们RabbitMQ服务端充当的功能了,那么消息是按照什么规则进行转发的呢?需要用到下面几个概念;

exchange:交换机,他是和producer直接进行打交道的,有点类似于路由器的功能,主要就是进行转发操作的呗,那么producer到底用哪个exchange进行路由呢?这个取决于routing key(路由键),每个消息都有这个键,我们也可以自己设定,其实就是一字符串;

queue:消息队列,用于存放消息,他接收exchange路由过来的消息,我们可以对队列内容进行持久化操作,那么queue到底接收那个exchange路由的消息呢?这个时候就要用到binding key(绑定键)了,绑定键会将队列和exchange进行绑定,至于绑定方式,RabbitMQ提供了多种方式,大家可以看看鸿洋大神的RabbitMQ博客系列(点击查看);

以上就是RabbitMQ涉及到的一些概念了,用一张图表示这些概念之间的关系就是:

3.RabbitMQ简单使用

producer(生产者)端步骤:

(1):创建ConnectionFactory,并且设置一些参数,比如hostname,portNumber等等

(2):利用ConnectionFactory创建一个Connection连接

(3):利用Connection创建一个Channel通道

(4):创建queue并且和Channel进行绑定

(5):创建消息,并且发送到队列中

注意,在我们当前的例子中,并没有用到exchange交换机,RabbitMQ默认情况下是会创建一个空字符串名字的exchange的,如果我们没有创建自己的exchange的话,默认就是使用的这个exchange;

producer端代码:

[java] view plain copy
  1. publicclassSender{
  2. privatefinalstaticStringQUEUE_NAME="MyQueue";
  3. staticvoidmain(String[]args){
  4. send();
  5. }
  6. voidsend()
  7. {
  8. ConnectionFactoryfactory=null;
  9. Connectionconnection=null;
  10. Channelchannel=try{
  11. factory=newConnectionFactory();
  12. factory.setHost("localhost");
  13. connection=factory.newConnection();
  14. channel=connection.createChannel();
  15. channel.queueDeclare(QUEUE_NAME,false,null);
  16. Stringmessage="myfirstmessage.....";
  17. channel.basicpublish("",QUEUE_NAME,153);background-color:inherit;font-weight:bold;">null,message.getBytes("UTF-8"));
  18. System.out.println("已经发送消息....."+message);
  19. }catch(IOExceptione){
  20. e.printstacktrace();
  21. catch(TimeoutExceptione){
  22. finally{
  23. //关闭资源
  24. channel.close();
  25. connection.close();
  26. }catch(IOExceptione){
  27. e.printstacktrace();
  28. catch(TimeoutExceptione){
  29. }
  30. }

consumer(消费者)端步骤:

(1):创建ConnectionFactory,并且设置一些参数,比如hostname,255);"> (3):利用Connection创建一个Channel通道

(4):将queue和Channel进行绑定,注意这里的queue名字要和前面producer创建的queue一致

(5):创建消费者Consumer来接收消息,同时将消费者和queue进行绑定

consumer端代码:

classReceiver{

  • receive();
  • voidreceive()
  • try{
  • factory=newConnectionFactory();
  • factory.setHost("localhost");
  • connection=factory.newConnection();
  • channel=connection.createChannel();
  • channel.queueDeclare(QUEUE_NAME,153);background-color:inherit;font-weight:bold;">null);
  • Consumerconsumer=newDefaultConsumer(channel){
  • @Override
  • voidhandleDelivery(StringconsumerTag,Envelopeenvelope,BasicPropertiesproperties,
  • byte[]body)throwsIOException{
  • System.out.println("11111111111");
  • Stringmessage=newString(body,"UTF-8");
  • System.out.println("收到消息....."+message);
  • }};
  • channel.basicConsume(QUEUE_NAME,153);background-color:inherit;font-weight:bold;">true,consumer);
  • finally{
  • //关闭资源
  • channel.close();
  • connection.close();
  • }
  • Windows下RabbitMQ安装及入门的更多相关文章

    1. 尝试访问字典时出现Swift错误:“找不到成员”下标“

      这不会编译:我尝试了几件不同的事情;不同的声明Dictionary的方法,改变它的类型以匹配数据的嵌套.我也试图明确地说我的“任何”是一个集合,所以它可以被下标.没有骰子.我们来看看响应声明为Dictionary(),所以在第一个下标之后,您尝试在类型为Any的对象上调用另外两个下标.解决方案1.将响应类型更改为嵌套字典.请注意,我添加了问号,因为任何时候您访问一个字典项,

    2. python操作RabbitMq的三种工作模式

      这篇文章主要为大家介绍了python操作RabbitMq的三种工作模式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

    3. PHP高级编程之消息队列原理与实现方法详解

      这篇文章主要介绍了PHP高级编程之消息队列原理与实现方法,结合实例形式详细分析了PHP消息队列相关概念、原理、使用场景及相关操作注意事项,需要的朋友可以参考下

    4. springboot-rabbitmq-reply 消息直接回复模式详情

      这篇文章主要介绍了springboot-rabbitmq-reply消息直接回复模式详情,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下

    5. SpringBoot+RabbitMQ 实现死信队列的示例

      本文主要介绍了SpringBoot+RabbitMQ 实现死信队列的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    6. PHP实现RabbitMQ消息列队的示例代码

      众所周知,php本身的运行效率存在一定的缺陷,所以如果有一个很复杂很耗时的业务时,必须开发一个常驻内存的程序。本文将利用PHP实现RabbitMQ消息列队,感兴趣的可以了解一下

    7. Java RabbitMQ消息队列详解常见问题

      消息队列是最古老的中间件之一,从系统之间有通信需求开始,就自然产生了消息队列。本文告诉什么是消息队列,为什么需要消息队列,常见的消息队列有哪些,RabbitMQ的部署和使用

    8. SpringBoot整合Canal与RabbitMQ监听数据变更记录

      这篇文章主要介绍了SpringBoot整合Canal与RabbitMQ监听数据变更记录,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

    9. RabbitMQ消息确认机制剖析

      这篇文章主要为大家介绍了RabbitMQ消息确认机制剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

    10. PHP多进程通信-消息队列使用

      这篇文章主要介绍了PHP通信-消息队列使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    随机推荐

    1. static – 在页面之间共享数据的最佳实践

      我想知道在UWP的页面之间发送像’selectedItem’等变量的最佳做法是什么?创建一个每个页面都知道的静态全局变量类是一个好主意吗?

    2. .net – 为Windows窗体控件提供百分比宽度/高度

      WindowsForm开发的新手,但在Web开发方面经验丰富.有没有办法为Windows窗体控件指定百分比宽度/高度,以便在用户调整窗口大小时扩展/缩小?当窗口调整大小时,可以编写代码来改变控件的宽度/高度,但我希望有更好的方法,比如在HTML/CSS中.在那儿?

    3. 使用Windows Azure查询表存储数据

      我需要使用特定帐户吗?>将应用程序部署到Azure服务后,如何查询数据?GoogleAppEngine有一个数据查看器/查询工具,Azure有类似的东西吗?>您可以看到的sqlExpressintance仅在开发结构中,并且一旦您表示没有等效,所以请小心使用它.>您可以尝试使用Linqpad查询表格.看看JamieThomson的thispost.

    4. windows – SetupDiGetClassDevs是否与文档中的设备实例ID一起使用?

      有没有更好的方法可以使用DBT_DEVICEARRIVAL事件中的数据获取设备的更多信息?您似乎必须指定DIGCF_ALLCLASSES标志以查找与给定设备实例ID匹配的所有类,或者指定ClassGuid并使用DIGCF_DEFAULT标志.这对我有用:带输出:

    5. Windows Live ID是OpenID提供商吗?

      不,WindowsLiveID不是OpenID提供商.他们使用专有协议.自从他们的“测试版”期结束以来,他们从未宣布计划继续它.

    6. 如果我在代码中进行了更改,是否需要重新安装Windows服务?

      我写了一个Windows服务并安装它.现在我对代码进行了一些更改并重新构建了解决方案.我还应该重新安装服务吗?不,只需停止它,替换文件,然后重新启动它.

    7. 带有双引号的字符串回显使用Windows批处理输出文件

      我正在尝试使用Windows批处理文件重写配置文件.我循环遍历文件的行并查找我想要用指定的新行替换的行.我有一个’函数’将行写入文件问题是%Text%是一个嵌入双引号的字符串.然后失败了.可能还有其他角色也会导致失败.如何才能使用配置文件中的所有文本?尝试将所有“在文本中替换为^”.^是转义字符,因此“将被视为常规字符你可以尝试以下方法:其他可能导致错误的字符是:

    8. .net – 将控制台应用程序转换为服务?

      我正在寻找不同的优势/劣势,将我们长期使用的控制台应用程序转换为Windows服务.我们为ActiveMQ使用了一个叫做java服务包装器的东西,我相信人们告诉我你可以用它包装任何东西.这并不是说你应该用它包装任何东西;我们遇到了这个问题.控制台应用程序是一个.NET控制台应用程序,默认情况下会将大量信息记录到控制台,尽管这是可配置的.任何推荐?我们应该在VisualStudio中将其重建为服务吗?我使用“-install”/“-uninstall”开关执行此操作.例如,seehere.

    9. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

      哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

    10. windows – 当我试图批量打印变量时,为什么我得到“Echo is on”

      我想要执行一个简单的批处理文件脚本:当我在XP中运行时,它给了我预期的输出,但是当我在Vista或Windows7中运行它时,我在尝试打印值时得到“EchoisOn”.以下是程序的输出:摆脱集合表达式中的空格.等号(=)的两侧可以并且应该没有空格BTW:我通常在@echo关闭的情况下启动所有批处理文件,并以@echo结束它们,所以我可以避免将代码与批处理文件的输出混合.它只是使您的批处理文件输出更好,更清洁.

    返回
    顶部