这一部分注意学习一下java版 rabbitmq hello客户端。
1、先决条件
- 假设您已经安装并且运行rabbitmq在localhost,端口为5672,如果您使用host,端口或证书不是默认的就需要在配置做相应调整
- 可以先看一下和做好准备工作 rabbitmq的安装和启动(brew),后面有用到创建queue和vhost
2、简介
- rabbitMq类似邮局,只是与邮局不同的是它不处理数据,只是接收,存储,转发二进制数据。
- producer(生产者)无非就是发送,发送消息的程序是生产者,用P表示
- queue(队列) 就是rabbitmq中的邮箱,用于存储消息,同时消费者也可以从其中队列中拿去消息。
- consumer(消费者) 就等待从队列中拿消息进行处理,用C表示
- 请注意,生产者,消费者和代理不必驻留在同一主机上;实际上,在大多数应用程序中它们也没有。应用程序也可以既是生产者又是消费者
3、Hello World
- 先简单考虑一下,消息为A它流向,(假设是同步),如下所示

3.1、rabbitmq的jar依赖
-
Rabbitmq是支持多种协议,一般用到就是AMQP 0-9-1为主,示例也使用协议。
-
同时采用maven方式来管理依赖
-
<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.7.1</version> </dependency>
-
-
IDE工具采用Idea (快速创建一个)
-

3.2、创建生产者(send.java)
-

-
代码如下
-
public class Send { private final static String QUEUE_NAME = "test_queue"; private final static String V_HOST = "test_host"; public static void main(String[] args) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setVirtualHost(V_HOST); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); //因为在第一步已经设置好队列了 // channel.queueDeclare(QUEUE_NAME, false, false, false, null); String message = "Hello World"; // 向队列test_queue发送消息 channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8)); System.out.println("[x] Sent '" + message + "'"); //打印消息队列中的消息数量 System.out.println(channel.messageCount(QUEUE_NAME)); } }
-
-
可以根据上面代码可以分析出,利用工厂模式,先配置一些基础信息,比如vhost和host(连接是本地端口号),端口之类,类的关系,消息发送,可以查看如下示意图
-

-
执行上述代码你可以查看一下rabbitMq控制台
-
注意事项(一般应不会)
- rabbitmq如果运行磁盘只有200M可用时候,拒绝接受消息
3.3、创建消费者(Recv.java)
-

-
/** * @author liangchen * @date 2021/6/3 */ public class Recv { private final static String QUEUE_NAME = "test_queue"; private final static String V_HOST = "test_host"; public static void main(String[] args) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setVirtualHost(V_HOST); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); // 需要使用jdk1.8,因为使用lambada表达式 DeliverCallback deliverCallback = (consumerTag, delivery) -> { String message = new String (delivery.getBody(), "UTF-8"); System.out.println(" [x] Received '" + message + "'"); }; channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {}); } } -
执行结果如下
-
[*] Waiting for messages. To exit press CTRL+C [x] Received 'Hello World' [x] Received 'Hello World' [x] Received 'Hello World' -

-
-
代码你会发现基本跟生产者一样,一个生成消息发送, 一个接受消息进行处理,这里处理使用回调方式,利用lambada表达式
4、总结
-
学习java版创建生产者和消费者
-
详情代码可以参考github上示例 rabbitmq helloworld
-
希望对您有帮助,喜欢star
-
下一篇将会研究一下客户发送这部分的源码
本文介绍Java版RabbitMQ Hello客户端的入门知识。先说明了先决条件,需安装并运行RabbitMQ。接着介绍RabbitMQ概念,如生产者、队列、消费者。然后通过Hello World示例,讲解了RabbitMQ的jar依赖、生产者和消费者代码的创建。最后总结学习内容并给出参考代码。

1333

被折叠的 条评论
为什么被折叠?



