前言:
现在大家对“简单模式怎么写”大致比较关注,小伙伴们都需要知道一些“简单模式怎么写”的相关内容。那么小编也在网摘上收集了一些有关“简单模式怎么写””的相关内容,希望小伙伴们能喜欢,同学们一起来学习一下吧!一、简单模式(Hello World)
官网地址:
工作流程
P:生产者,也就是发送消息的程序。
C:消费者,消费者是一个主要等待接收消息的程序
Queue:消息队列,上图中红色部分,类似一个邮箱,它本质是一个大型的消息缓存区,生产者可以将消息发送到队列,消费者可以尝试从队列中接收数据。
请注意,生产者、消费者和代理不必驻留在同一主机上;事实上,在大多数应用中它们并不这样做。应用程序也可以既是生产者又是消费者。
简单模式就是一个生产者发送消息,一个消费者消费消息,消息的消费者监听消息队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列中删除。
简单工作模式的代码不在这里介绍了。上一篇《RabbitMQ入门有》介绍。
编写生产者
package com.yourui.mq;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import java.nio.charset.StandardCharsets;/** * @author : pankx * @description: * @date: 2023/8/29 19:55 */public class Producer { private final static String QUEUE_NAME = "hello"; public static void main(String[] argv) throws Exception { //创建工厂链接 ConnectionFactory factory = new ConnectionFactory(); //主机地址 factory.setHost("localhost"); //端口地址,不写默认为 15672 factory.setPort(5672); //虚拟主机名称;默认为 factory.setVirtualHost("/"); //连接用户名;默认为guest factory.setUsername("admin"); //连接密码;默认为guest factory.setPassword("admin"); //创建链接 try (Connection connection = factory.newConnection(); //创建channel链接通道 Channel channel = connection.createChannel()) { /** * 声明(创建)队列 * queue 参数1:队列名称 * durable 参数2:是否定义持久化队列,当mq重启之后,数据还存在 * exclusive 参数3:是否独占本次连接 * ① 是否独占,只能有一个消费者监听这个队列 * ② 当connection关闭时,是否删除队列 * autoDelete 参数4:是否在不使用的时候自动删除队列,当没有consumer时,自动删除 * arguments 参数5:队列其它参数 */ channel.queueDeclare(QUEUE_NAME, false, false, false, null); //发送消息内容 String message = "Hello World!"; /** * 参数1:交换机名称,如果没有指定则使用默认"" * 参数2:路由key,简单模式可以传递队列名称 * 参数3:消息的其它配置信息,暂时可以不配置 * 参数4:消息主体,这里为 UTF-8 格式的字节数组,可以有效地杜绝中文乱码。 */ while(true){ channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8)); //打印发送的消息 System.out.println(" [x] Sent '" + message + "'"); Thread.sleep(1000); } } }}编写消费者
package com.yourui.mq;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.DeliverCallback;import java.nio.charset.StandardCharsets;/** * @author : pankx * @description:消费者 * @date: 2023/8/29 20:06 */public class Consumer { /** 创建队列Queue,通过信道获取队列的数据*/ private final static String QUEUE_NAME = "hello"; public static void main(String[] argv) throws Exception { //创建工厂类 ConnectionFactory factory = new ConnectionFactory(); //设置rabbitmq主机 factory.setHost("localhost"); //端口 默认值 5672 factory.setPort(5672); //虚拟机 默认值/ factory.setVirtualHost("/"); //用户名 factory.setUsername("admin"); //密码 factory.setPassword("admin"); //创建connection 链接 Connection connection = factory.newConnection(); //创建channel链接通道 Channel channel = connection.createChannel(); /** * 声明(创建)队列 * queue 参数1:队列名称 * durable 参数2:是否定义持久化队列,当mq重启之后,数据还存在 * exclusive 参数3:是否独占本次连接 * ① 是否独占,只能有一个消费者监听这个队列 * ② 当connection关闭时,是否删除队列 * autoDelete 参数4:是否在不使用的时候自动删除队列,当没有consumer时,自动删除 * arguments 参数5:队列其它参数 */ channel.queueDeclare(QUEUE_NAME, false, false, false, null); //等待接收消息的日志 System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); /**接收队列中数据的方法 回调方法,当收到消息后,会自动执行该方法 1. consumerTag:标识 2. envelope:获取一些信息,交换机,路由key... 3. properties:配置信息 4. body:数据 */ DeliverCallback deliverCallback = (consumerTag, delivery) -> { String message = new String(delivery.getBody(), StandardCharsets.UTF_8); //打印接收消息的日志 System.out.println(" [x] Received '" + message + "'"); }; /**参数: 1. queue:队列名称 2. autoAck:是否自动确认 ,类似咱们发短信,发送成功会收到一个确认消息(如果自动签收,会删除队列的该条消息) 3. DeliverCallback:回调对象 4、CancelCallback :中断正在执行的调度任务 */ //消费者类似一个监听程序,主要是用来监听消息 channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { }); }}运行程序查看结果启动生产者
登录控制台可以查看队列名称等,在消息发送的过程中,也可以使用 RabbitMQ 的管理面板查看到消息的走势图,如下所示。队列的名称,消息消费的走势等。
启动消费者
到这利用RabbitMQ失效生产和消费Hello world的就完成了。
代码示例:
github地址:
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #简单模式怎么写