RabbitMQ下载与设置

打印 上一主题 下一主题

主题 845|帖子 845|积分 2535

安装Erlang
Erlang 下载地点如下:
https://erlang.org/download/otp_versions_tree.html
安装 RabbitMQ
RabbitMQ 下载地点如下:
https://www.rabbitmq.com/install-windows.html
查看服务,服务已经正常启动

打开Command Prompt

输入rabbitmqctl.bat status,出现题目
Error: unable to perform an operation on node ‘rabbit@LAPTOP-8VJSJ45O’. Please see diagnostics information and suggestions below.
Authentication failed (rejected by the remote node), please check the Erlang cookie
办理题目


  • 利用旧版本Erlang
  • cookie更换到精确的位置
打开路径C:WindowsSystem32configsystemprofile、
这里有一个.erlang.cookie,复制这个文件到C:Users你的用户名下,覆盖文件
再次输入
rabbitmqctl.bat status
可以输入以下命令来启用客户端管理 UI 插件
rabbitmq-plugins enable rabbitmq_management
在欣赏器地点栏输入http://localhost:15672/可以进入管理端界面
默认的用户名和暗码是“guest”和“guest”。
在 Java 中利用 RabbitMQ
第一步,在项目中添加 RabbitMQ 客户端依靠:
  1. <dependency>
  2.     <groupId>com.rabbitmq</groupId>
  3.     <artifactId>amqp-client</artifactId>
  4.     <version>5.9.0</version>
  5. </dependency>
复制代码
第二步,我们来模拟一个最简单的场景,一个生产者发送消息到队列中,一个斲丧者从队列中读取消息并打印。
新建生产者类 Wanger :
  1. public class Wanger {
  2.     private final static String QUEUE_NAME = "queue";
  3.     public static void main(String[] args) throws IOException, TimeoutException {
  4.         ConnectionFactory factory = new ConnectionFactory();
  5.         try (Connection connection = factory.newConnection();
  6.              Channel channel = connection.createChannel()) {
  7.             channel.queueDeclare(QUEUE_NAME, false, false, false, null);
  8.             String message = "发送消息";
  9.             channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8));
  10.             System.out.println("发送 '" + message + "'");
  11.         }
  12.     }
  13. }
复制代码
1)QUEUE_NAME 为队列名,也就是说,生产者发送的消息会放到 queue队列中。
2)创建服务器连接:ConnectionFactory 是一个非常方便的工厂类,可用来创建到 RabbitMQ 的默认连接(主机名为“localhost”)。然后,创建一个通道( Channel)来发送消息。Connection 和 Channel 类都实现了 Closeable 接口,以是可以利用 try-with-resource 语句
3)在发送消息的时间,必须设置队列名称,通过queueDeclare()方法设置。
4)basicPublish()方法用于发布消息


  • 第一个参数为交换机(exchange),当前场景不需要,因此设置为空字符串;
  • 第二个参数为路由关键字(routingKey),暂时利用队列名填充;
  • 第三个参数为消息的其他参数(BasicProperties),暂时不设置;
  • 第四个参数为消息的主体,这里为 UTF-8 格式的字节数组,可以有效地杜绝中文乱码。
接下来新建斲丧者类 XiaoXinag:
  1. public class XiaoXiang {
  2.     private final static String QUEUE_NAME = "love";
  3.     public static void main(String[] args) throws IOException, TimeoutException {
  4.         ConnectionFactory factory = new ConnectionFactory();
  5.         Connection connection = factory.newConnection();
  6.         Channel channel = connection.createChannel();
  7.         channel.queueDeclare(QUEUE_NAME, false, false, false, null);
  8.         System.out.println("等待接收消息");
  9.         DeliverCallback deliverCallback = (consumerTag, delivery) -> {
  10.             String message = new String(delivery.getBody(), "UTF-8");
  11.             System.out.println(" 接收到的消息 '" + message + "'");
  12.         };
  13.         channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
  14.     }
  15. }
复制代码
1)没有利用 try-with-resource 语句来自动关闭连接和通道,因为我们希望斲丧者能够一直保持连接,直到我们强制关闭它。
2)在接收消息的时间,必须设置队列名称,通过 queueDeclare() 方法设置。
3)由于 RabbitMQ 将会通过异步的方式向我们推送消息,因此我们需要提供了一个回调,该回调将对消息举行缓冲,直到我们做好准备接收它们为止。
basicConsume()方法用于接收消息:


  • 第一个参数为队列名(queue),和生产者相匹配。
  • 第二个参数为 autoAck,如果为 true 的话,表明服务器要一次性交付消息。
  • 第三个参数为 DeliverCallback,也就是消息的回调函数。
  • 第四个参数为 CancelCallback
在消息发送的过程中,也可以利用 RabbitMQ 的管理面板查看到消息的走势图,如下所示。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

三尺非寒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表