本文共 3141 字,大约阅读时间需要 10 分钟。
RabbitMQ 是一个消息代理,负责接收和转发消息。可以将它想象成一个邮局:当你把你想要邮寄的邮件放入一个邮箱时,你可以确定邮递员先生或女士最终会把邮件送到你的收件人那里。RabbitMQ 和邮局的主要区别在于,它不处理纸张,而是接受、存储和转发二进制数据消息。
/。ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");factory.setPort(5672);factory.setVirtualHost("/hello");factory.setUsername("guest");factory.setPassword("guest");Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare("hello_world", true, false, false, null);for (int i = 0; i < 10; i++) { String body = i + "hello rabbitmq!"; channel.basicPublish("", "hello_world", null, body.getBytes());}channel.close();connection.close();
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");factory.setPort(5672);factory.setVirtualHost("/hello");factory.setUsername("guest");factory.setPassword("guest");Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare("hello_world", true, false, false, null);Consumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { System.out.println("body = " + new String(body)); }};channel.basicConsume("hello_world", true, consumer);默认情况下,RabbitMQ 会将每条消息依次发送给下一个消费者。平均而言,每个消费者将获得相同数量的消息。
Direct 交换机的绑定规则基于路由键。消息的路由键必须与绑定的路由键完全匹配,才能被路由到目标队列。
可以将多个队列绑定到同一个交换机。消息的路由键需要匹配多个绑定的路由键之一,才能被路由到目标队列。
Topic 交换机支持通配符匹配。路由键可以包含通配符(如*和#),使交换机能够更灵活地路由消息。
Headers 交换机根据消息的头部属性(header)来进行路由匹配。
如果我们需要在远程计算机上运行一个函数并等待结果,可以使用RabbitMQ构建一个RPC系统。客户端发送请求消息,服务器用响应消息进行响应。通过设置回调队列和correlationId,可以实现请求-响应的通信。
可以通过绑定路由键来指定消息的路由目标。例如:
error,会被路由到test_direct_queue1。info, error, warning,会被路由到test_direct_queue2。路由键可以包含通配符(如*和#),使交换机能够更灵活地路由消息。例如:
hw.#,可以匹配hw.insert.abc或hw.insert。hw.*,只能匹配hw.insert。通过消息头部属性(headers)来进行路由匹配。例如:
routing_key=error,可以被路由到对应的队列。由于图片无法直接嵌入,以下是图片描述:
RabbitMQ 消息模型的核心思想是,生产者从不直接向队列发送任何消息。实际上,通常情况下,生产者甚至根本不知道消息是否会被传递到任何队列。交换机是消息传输的中间产物,它接收来自生产者的消息,并根据路由规则将消息推送到目标队列。消费者则通过监听队列来接收消息。RabbitMQ 提供了多种工作模式,包括简单消息队列、任务队列、发布/订阅模式以及远程过程调用(RPC)。
转载地址:http://sqtg.baihongyu.com/