假设已经在服务器上安装完RabbitMQ。我写的教程
一、发送消息到队列(生产者)
新建一个maven项目,在pom.xml文件加入以下依赖
运行后再浏览器进入RabbitMQ的控制台,切换到queue看到
二、获取队列消息(消费者)
新建一个C1类
运行后输出为
消费者一般都不会关闭,会一直等待队列消息,可以手动关闭程序。
channel.basicConsume(queueName,true,consumer);中的true为收到消息后自动确认,改为false取消自动确认。
在handleDelivery方法最后面用// 手动确认
// 确认收到消息
来收到手动确认消息。消费者可以有多个并且可以同时消费一个队列;
当有多个消费者同时消费同一个队列时,收到的消息是平均分配的(消费者没收到之前已经确认每个消费者受到的消息),
但当其中一个消费者性能差的话,会影响其他的消费者,因为还要等它收完消息,这样会拖累其他消费者。
可以设置channel 的basicQos方法
三、扇形(fanout)交换机
扇形交换机是基本的交换机类型,会把收到的消息以广播的形式发送到绑定的队列里,因为不需要经过条件筛选,所以它的速度最快。
在生产者项目新建一个fanout类
运行后在RabbitMQ网页管理后台的queue会看到
切换到Exchanges会看到一个
就是我们声明的交换机,点击会看到我们绑定的队列
四、直连(direct)交换机
直连交换机会带路由功能,队列通过routing_key与直连交换机绑定,发送消息需要指定routing_key,交换机收到消息时,交换机会根据routing_key发送到指定队列里,同样的routing_key可以支持多个队列。
在生产者项目新建direct类
运行后到后台的queue会看到
切换到Exchanges会看到
点击进去
五、主题(topic)交换机
主题交换机的routing_key可以有一定的规则,交换机和队列的routing_key需要采用*.#.*…..的格式
每个部分用.分开
*代表一个单词(不是字符)
#代表任意数量(0或n个)单词
在生产者项目新进topic类
运行后,到后台queue会看到
切换到Exchanges会看到
点击进入会看到