搜索
首页Javajava教程RabbitMQ安装(windows)实例教程

RabbitMQ安装(windows)实例教程

Jul 18, 2017 pm 02:44 PM
rabbitmq学习笔记

管理后台

rabbitmq自带管理后台,安装后需要配置开启
进入rabbitmq安装目录中的sbin目录执行
rabbitmq-plugins enable rabbitmq_management
重启rabbitmq服务生效
打开http://localhost:15672/即可看到管理后台
用户名密码均为guest

配置说明


使用命令行查看队列列表

sbin>rabbitmqctl list_queues  
sbin>rabbitmqctl list_queues name messages_ready messages_unacknowledged

使用命令行查看exchange列表

sbin>rabbitmqctl list_exchanges

定义队列

RabbitMQ 不允许你用不同的参数重新定义一个已经存在的队列。

RabbitMQ doesn't allow you to redefine an existing queue with different parameters and will return an error to any program that tries to do that

可靠性

要确保消息不丢失,需要设置消息持久化,同时队列也必须为耐久的。
但是这样做仍然不是100%可靠,因为如果RabbitMQ 在接收消息后、完成持久化之前崩溃,那么就会导致消息丢失。

重复处理

考虑如下场景(前提:队列、消息都是持久的):

  1. 消费者接收了一个消息msgA,处理了一半,没有完成、没有发起ack确认;

  2. 此时RabbitMQ 崩溃了;

  3. 消费者完成了消息msgA的处理;

  4. 当RabbitMQ 重启后,发现msgA未被处理,于是msgA再次被发送给消费者。

这种场景下,消息msgA就会被处理两次,所以消费者端应该要有防止重复处理的机制。

ACK

ACK确认,只是告诉RabbitMQ 消费者已经完成了对消息的处理,而不是说逻辑上处理成功,即使是由于业务处理失败了,也要进行ACK确认。因为一般而言业务上的原因导致失败的话,重试是不解决问题的。只有网络中断、机器断电等故障引起的失败才有重试的必要。

防止业务负载集中到某个消费者

channel.basicQos(prefetchCount);

设置
prefetchCount=1
,告诉RabbitMQ 每次只给一个消费者分配一个消息,直到上一个分配给该消费者的消息被确认处理完成。这样一来,消息就会根据实际处理情况,每次都分配给空闲的消费者。

关于默认Exchange

默认Exchange隐式地绑定到每一个队列,路由key为队列名。不能对其进行显式绑定或解绑。并且它是不可删除的。

The default exchange is implicitly bound to every queue, with a routing key equal to the queue name. It is not possible to explicitly bind to, or unbind from the default exchange. It also cannot be deleted.

消息传递的基本过程

发布者发布一个消息
-->exchange接收消息(如果发布者没有指定特定的Exchange则使用默认Exchange),并根据exchange的类型,按照一定的路由规则,把消息路由给每一个符合路由规则的队列(如果没有匹配的队列,则消息被丢弃)
-->队列将消息发送给订阅该队列的某一个消费者(如果没有消费者则消息保留在队列中,知道有消费者消费该消息)

Topic Exchange的通配符

星号匹配一个单词(注意,不是一个字母)

* (star) can substitute for exactly one word.
井号匹配任意个单词
# (hash) can substitute for zero or more words.

AMQP协议mandatory和immediate标志位的作用

mandatory和immediate是AMQP协议中basic.pulish方法中的两个标志位,它们都有当消息传递过程中不可达目的地时将消息返回给生产者的功能。具体区别在于:

1. mandatory标志位

当mandatory标志位设置为true时,如果exchange根据自身类型和消息routeKey无法找到一个符合条件的queue,那么会调用basic.return方法将消息返还给生产者;当mandatory设为false时,出现上述情形broker会直接将消息扔掉。

2. immediate标志位

当immediate标志位设置为true时,如果exchange在将消息route到queue(s)时发现对应的queue上没有消费者,那么这条消息不会放入队列中。当与消息routeKey关联的所有queue(一个或多个)都没有消费者时,该消息会通过basic.return方法返还给生产者。

以上是RabbitMQ安装(windows)实例教程的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Java平台独立性:与不同的操作系统的兼容性Java平台独立性:与不同的操作系统的兼容性May 13, 2025 am 12:11 AM

JavaachievesPlatFormIndependencethroughTheJavavIrtualMachine(JVM),允许Codetorunondifferentoperatingsystemsswithoutmodification.thejvmcompilesjavacodeintoplatform-interploplatform-interpectentbybyteentbytybyteentbybytecode,whatittheninternterninterpretsandectectececutesoneonthepecificos,atrafficteyos,Afferctinginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginging

什么功能使Java仍然强大什么功能使Java仍然强大May 13, 2025 am 12:05 AM

JavaispoperfulduetoitsplatFormitiondence,对象与偏见,RichstandardLibrary,PerformanceCapabilities和StrongsecurityFeatures.1)Platform-dimplighandependectionceallowsenceallowsenceallowsenceallowsencationSapplicationStornanyDevicesupportingJava.2)

顶级Java功能:开发人员的综合指南顶级Java功能:开发人员的综合指南May 13, 2025 am 12:04 AM

Java的顶级功能包括:1)面向对象编程,支持多态性,提升代码的灵活性和可维护性;2)异常处理机制,通过try-catch-finally块提高代码的鲁棒性;3)垃圾回收,简化内存管理;4)泛型,增强类型安全性;5)ambda表达式和函数式编程,使代码更简洁和表达性强;6)丰富的标准库,提供优化过的数据结构和算法。

Java真的平台独立吗? '写一次,在任何地方运行”如何起作用Java真的平台独立吗? '写一次,在任何地方运行”如何起作用May 13, 2025 am 12:03 AM

javaisnotirelyPlatemententduetojvmvariationsandnativecodinteintration,butitlargelyupholdsitsitsworapromise.1)javacompilestobytecoderunbythejvm

揭示JVM:您了解Java执行的关键揭示JVM:您了解Java执行的关键May 13, 2025 am 12:02 AM

thejavavirtualmachine(JVM)IsanabtractComputingmachinecrucialforjavaexecutionasitrunsjavabytecode,使“ writeononce,runanywhere”能力

Java仍然是基于新功能的好语言吗?Java仍然是基于新功能的好语言吗?May 12, 2025 am 12:12 AM

Javaremainsagoodlanguageduetoitscontinuousevolutionandrobustecosystem.1)Lambdaexpressionsenhancecodereadabilityandenablefunctionalprogramming.2)Streamsallowforefficientdataprocessing,particularlywithlargedatasets.3)ThemodularsystemintroducedinJava9im

是什么使Java很棒?关键特征和好处是什么使Java很棒?关键特征和好处May 12, 2025 am 12:11 AM

Javaisgreatduetoitsplatformindependence,robustOOPsupport,extensivelibraries,andstrongcommunity.1)PlatformindependenceviaJVMallowscodetorunonvariousplatforms.2)OOPfeatureslikeencapsulation,inheritance,andpolymorphismenablemodularandscalablecode.3)Rich

前5个Java功能:示例和解释前5个Java功能:示例和解释May 12, 2025 am 12:09 AM

Java的五大特色是多态性、Lambda表达式、StreamsAPI、泛型和异常处理。1.多态性让不同类的对象可以作为共同基类的对象使用。2.Lambda表达式使代码更简洁,特别适合处理集合和流。3.StreamsAPI高效处理大数据集,支持声明式操作。4.泛型提供类型安全和重用性,编译时捕获类型错误。5.异常处理帮助优雅处理错误,编写可靠软件。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器