文章插图
我们选择从队列入手,被绑定的交换器是hello-exchange,因为类型是direct,所以还需要填写routing key 。

文章插图
建立完成之后,在交换器那边也可以看到对应的绑定关系 。

文章插图
4.4、发送消息最后,我们从交换器入手,选择对应的交换器,点击Publish message标签,填写对应的路由键 key,发送一下数据,查看数据是否发送到对应的队列中 。

文章插图
然后点击进入 Queues 菜单,查询消息队列基本情况 。

文章插图
然后选择hello-mq消息队列,点击Get messages标签,获取队列中的消息 。

文章插图
结果如下,可以很清晰的看到,消息写入到队列!

文章插图
五、JAVA客户端使用RabbitMQ 支持多种语言访问,本次介绍 RabbitMQ Java Client 的一些简单的api使用,如声明 Exchange、Queue,发送消息,消费消息,一些高级 api 会在后面的文章中详细的说明 。
5.1、引入 rabbitMQ 依赖包
<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>4.1.0</version></dependency>5.2、连接服务器使用给定的参数(host name,端口等等)连接AMQP的服务器 。ConnectionFactory factory = new ConnectionFactory();factory.setUsername(userName);factory.setPassword(password);factory.setVirtualHost(virtualHost);factory.setHost(hostName);factory.setPort(portNumber);Connection conn = factory.newConnection();也可以使用通过 URI 方式进行连接 。ConnectionFactory factory = new ConnectionFactory();factory.setUri("amqp://userName:password@hostName:portNumber/virtualHost");Connection conn = factory.newConnection();Connection(连接)接口可以被用作创建一个channel(管道),利用 channel(管道)可以进行发送和接收消息,在后面我们会频繁使用到它 。Channel channel = conn.createChannel();注意,管道使用之后,需要进行关闭 。channel.close();conn.close();5.3、创建交换器不仅可以通过 web页面进行创建交换器,还可以通过代码进行声明(创建的意思)交换器 。//创建exchange,类型是direct类型channel.exchangeDeclare("ex-hello","direct");//第三个参数表示是否持久化,同步操作,有返回值AMQP.Exchange.DeclareOk ok = channel.exchangeDeclare("ex-hello","direct",true);System.out.println(ok);//创建带属性的交换器Map<String,Object> argument = new HashMap<>();argument.put("alternate-exchange","log");channel.exchangeDeclare("ex-hello","direct",true,false,argument);//异步创建exchange,没有返回值channel.exchangeDeclareNoWait("ex-hello","direct",true,false,false,argument);///判断exchange是否存在,存在的返回ok,不存在的exchange则报错AMQP.Exchange.DeclareOk declareOk = channel.exchangeDeclarePassive("ex-hello");System.out.println(declareOk);//删除exchange(可重复执行),删除一个不存在的也不会报错channel.exchangeDelete("ex-hello");创建交换器参数解读:- 第一个参数:表示交换器名称
- 第二个参数:表示交换器类型
- 第三个参数:表示是否持久化,为true表示会将队列持久化存储到硬盘
- 第四个参数:表示是否自动删除,当最后一个绑定(队列或者exchange)被unbind之后,该exchange 自动被删除
- 第五个参数:表示设置参数,参数类型为Map<String, Object>
//同步创建队列channel.queueDeclare(queueName, true, false, false, null);//异步创建队列没有返回值channel.queueDeclareNoWait(queueName,true,false,false,null);//判断queue是否存在,不存在会抛出异常channel.exchangeDeclarePassive(queueName);//删除队列channel.queueDelete(queueName);创建队列参数解读:
推荐阅读
- 深入理解 Linux 内核中的 RCU 机制
- 深入设计原则-SOLID
- 深入理解 HttpSecurity
- 什么是MQ?什么是RabbitMQ?能做什么?简单理解一下?
- 资深架构师:深入聊聊获取屏幕高度这件事
- 从 Spring Boot 程序启动深入理解 Netty 异步架构原理
- docker安装rabbitmq延时队列插件
- 解密windows系统版本和版本号,深入了解一组简单数字背后的故事
- 详解版 深入浅出 HTTPS
- Linux主流架构运维工作简单剖析
