当前位置: 首页 > news >正文

宁波网站建设制作电话号码苏州保洁公司

宁波网站建设制作电话号码,苏州保洁公司,东阿企业做网站推广,wordpress拷贝RabbitMQ 是一个开源的消息中间件#xff0c;实现了高级消息队列协议#xff08;AMQP#xff09;#xff0c;用于在分布式系统中进行消息传递。它能够在应用之间传递消息#xff0c;解耦应用组件#xff0c;提高系统的可伸缩性和可维护性。RabbitMQ 使用高级消息队列协议…RabbitMQ 是一个开源的消息中间件实现了高级消息队列协议AMQP用于在分布式系统中进行消息传递。它能够在应用之间传递消息解耦应用组件提高系统的可伸缩性和可维护性。RabbitMQ 使用高级消息队列协议AMQP这是一种开放的、标准化的协议定义了消息格式、交换方式、队列管理等规范。拥有强大的社区支持提供了广泛的文档和示例。它还支持插件机制可以根据实际需求进行扩展。下面就对rabbitMQ进行实战。 官网RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQ 1. 基本概念 消息队列消息队列是一种在不同应用之间传递数据的机制。在RabbitMQ中消息队列是通过Exchange交换机来进行消息路由的。ExchangeExchange负责将消息路由到一个或多个队列。RabbitMQ支持不同类型的Exchange包括Direct、Fanout、Topic等。QueueQueue是消息的容器消息在发送到Exchange后通过Routing Key被路由到一个或多个Queue中。 2. 使用场景 消息中间件经常被用来处理异步、削峰填谷和多个组件之间进行解耦的作用。 异步任务处理RabbitMQ可以作为任务队列将任务发布到队列中然后由后台工作者异步处理。这在分布式系统中很常见可以提高系统的响应速度。事件驱动架构RabbitMQ可以用于实现事件驱动的架构不同组件之间通过消息进行通信。当某个事件发生时可以将消息发送到队列中由其他组件进行消费。日志收集RabbitMQ可以用于日志收集系统应用程序将日志消息发送到队列中日志收集器订阅队列并将日志保存到数据库或其他存储中。 3. RabbitMQ实战 3.1 rabbitMQ安装 这里演示使用docker-compose方式安装创建一个docker-compose.yml文件并写入以下内容 version: 3services:rabbitmq:image: rabbitmq:managementcontainer_name: rabbitmq-containerports:- 5672:5672 # RabbitMQ 默认端口- 15672:15672 # RabbitMQ 管理界面端口volumes:- ./rabbitmq-data:/var/lib/rabbitmq # 数据文件挂载environment:RABBITMQ_DEFAULT_USER: rabbitRABBITMQ_DEFAULT_PASS: rabbit1qz执行命令拉取并启动容器 docker-compose up -d 执行命令查看docker容器是否正常 docker ps | grep rabbit 然后地址栏http://localhost:15672/访问rabbitMQ管理界面 输入用户名密码可以看到如下界面在这个页面上可以创建Exchanges和Queue这里就不赘述了大家想了解的可以参考官方文档。 3.1 代码集成 上面安装完MQ组件之后就可以用java代码进行连接测试了。使用Maven添加RabbitMQ的Java客户端库到项目里 dependencygroupIdcom.rabbitmq/groupIdartifactIdamqp-client/artifactIdversion5.14.0/version !-- 替换为最新版本 -- /dependency3.2 发送消息 import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Channel;public class MessageSender {private final static String QUEUE_NAME hello;public static void main(String[] argv) throws Exception {// 创建连接工厂ConnectionFactory factory new ConnectionFactory();factory.setHost(localhost); // RabbitMQ服务器地址// 创建连接try (Connection connection factory.newConnection(); Channel channel connection.createChannel()) {// 声明队列channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 发送消息String message Hello, RabbitMQ!;channel.basicPublish(, QUEUE_NAME, null, message.getBytes());System.out.println( [x] Sent message );}} }3.3 接收消息 import com.rabbitmq.client.*;public class MessageReceiver {private final static String QUEUE_NAME hello;public static void main(String[] argv) throws Exception {// 创建连接工厂ConnectionFactory factory new ConnectionFactory();factory.setHost(localhost); // RabbitMQ服务器地址// 创建连接try (Connection connection factory.newConnection(); Channel channel connection.createChannel()) {// 声明队列channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 定义消息处理器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 - {});// 持续监听队列不会退出System.out.println( [*] Waiting for messages. To exit press CtrlC);Thread.sleep(Long.MAX_VALUE);}} }以上示例中MessageSender类用于发送消息到名为hello的队列而MessageReceiver类用于监听该队列并接收消息。 4. RabbitMQ高级特性 RabbitMQ 提供了许多高级特性包括持久化、消息确认、事务、死信队列等。下面将结合 Java 完整代码进行说明这些高级特性。 1. 持久化 持久化确保在 RabbitMQ 服务器重启时队列和消息不会丢失。 代码示例 // 发布者代码 public class DurableProducer {// ...初始化 RabbitMQ 连接等代码...public void publishPersistentMessage(String message) {channel.basicPublish(, durable_queue, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());System.out.println( [x] Sent message );} }// 订阅者代码 public class DurableSubscriber {// ...初始化 RabbitMQ 连接等代码...public void subscribeToPersistentMessages() {channel.queueDeclare(durable_queue, true, false, false, null);channel.basicConsume(durable_queue, true, (consumerTag, delivery) - {String message new String(delivery.getBody(), UTF-8);System.out.println( [x] Received message );// 处理消息的逻辑...}, consumerTag - {});} }2. 消息确认 消息确认确保消息已经被消费者成功处理。 代码示例 // 发布者代码 public class AckProducer {// ...初始化 RabbitMQ 连接等代码...public void publishAckMessage(String message) {channel.basicPublish(, ack_queue, null, message.getBytes());System.out.println( [x] Sent message );} }// 订阅者代码 public class AckSubscriber {// ...初始化 RabbitMQ 连接等代码...public void subscribeToAckMessages() {channel.queueDeclare(ack_queue, false, false, false, null);channel.basicConsume(ack_queue, false, (consumerTag, delivery) - {String message new String(delivery.getBody(), UTF-8);System.out.println( [x] Received message );// 处理消息的逻辑...// 手动发送消息确认channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);}, consumerTag - {});} }3. 事务 RabbitMQ 支持事务但由于性能问题通常建议使用消息确认代替。 代码示例 // 发布者代码 public class TransactionalProducer {// ...初始化 RabbitMQ 连接等代码...public void publishTransactionalMessage(String message) throws IOException {try {channel.txSelect(); // 开启事务channel.basicPublish(, transactional_queue, null, message.getBytes());System.out.println( [x] Sent message );channel.txCommit(); // 提交事务} catch (IOException e) {channel.txRollback(); // 回滚事务e.printStackTrace();}} }// 订阅者代码 public class TransactionalSubscriber {// ...初始化 RabbitMQ 连接等代码...public void subscribeToTransactionalMessages() {try {channel.queueDeclare(transactional_queue, false, false, false, null);while (true) {channel.txSelect(); // 开启事务GetResponse response channel.basicGet(transactional_queue, true);if (response ! null) {String message new String(response.getBody(), UTF-8);System.out.println( [x] Received message );// 处理消息的逻辑...channel.txCommit(); // 提交事务} else {channel.txRollback(); // 回滚事务}}} catch (IOException e) {e.printStackTrace();}} }4. 死信队列 死信队列用于处理无法被消费者成功处理的消息。 代码示例 // 发布者代码 public class DeadLetterProducer {// ...初始化 RabbitMQ 连接等代码...public void publishDeadLetterMessage(String message) {MapString, Object headers new HashMap();headers.put(x-dead-letter-exchange, dead_letter_exchange);headers.put(x-dead-letter-routing-key, dl_queue);AMQP.BasicProperties properties new AMQP.BasicProperties.Builder().headers(headers).build();channel.basicPublish(, original_queue, properties, message.getBytes());System.out.println( [x] Sent message );} }// 订阅者代码 public class DeadLetterSubscriber {// ...初始化 RabbitMQ 连接等代码...public void subscribeToDeadLetterMessages() {channel.exchangeDeclare(dead_letter_exchange, BuiltinExchangeType.DIRECT);channel.queueDeclare(dl_queue, false, false, false, null);channel.queueBind(dl_queue, dead_letter_exchange, );channel.queueDeclare(original_queue, false, false, false, null);channel.queueBind(original_queue, , original_queue);channel.basicConsume(original_queue, false, (consumerTag, delivery) - {String message new String(delivery.getBody(), UTF-8);System.out.println( [x] Received message );// 处理消息的逻辑...// 模拟处理失败将消息发送到死信队列channel.basicNack(delivery.getEnvelope().getDeliveryTag(), false, false);}, consumerTag - {});} }这些是 RabbitMQ 的一些高级特性的简单示例。在实际项目中具体的实现可能会更加复杂并需要根据场景进行适当的调整。 5. 总结 RabbitMQ作为一款强大的消息中间件在异步任务处理、事件驱动架构以及日志收集等场景中都有广泛的应用。通过简单的代码实例我们了解了RabbitMQ的基本概念以及如何在Java中使用RabbitMQ进行消息的发送和接收。 希望本文能够帮助大家入门RabbitMQ并在实际项目中灵活应用消息队列的机制。
http://www.hkea.cn/news/14371730/

相关文章:

  • 四川建设网招标网网站seo与网站没关
  • 网页游戏网站官网生道网站建设平台
  • 中国建设银行互联网网站西安定制网站建设公司哪家好
  • 网站空间源码ui培训班教程
  • 企业网站优化分为两个方向上海债务优化公司
  • 各大网站投放广告怎么做拼多多一件代发货源app
  • 咖啡厅网站开发目标吃什么补肾吗
  • asp网站后台无法显示该页面googleseo優化
  • 抚州网站推广Wordpress图片热点
  • 网站安装php网站下拉菜单怎么做
  • 上海网站建设 普送如何利用wordpress编辑网站
  • 酷站是什么网站大气吉祥公司名字大全
  • 手机网站宽度自适应网站前端开发框架
  • 做京东网站需要哪些手续免费企业网站注册
  • 锦江网站建设做食品行业网站
  • 那些做seo的网站wordpress产品模块
  • 深圳网站设计 制作环保网站主题
  • 雅安市政建设公司网站广州的百度推广公司
  • 个人备案网站可以做淘宝客平面设计案例图片
  • html页面生成器什么是seo技术
  • 用html5做网站的优点h5网页制作平台
  • 建设内网网站流程中太建设集团官方网站
  • 网站建设期间工作洮南住建局网站
  • 多语种网站高端食品品牌排行榜前十名
  • 静态网站怎么做优化微信公众号人工服务电话
  • 做响应式网站的价格建设一个电子商务网站
  • 网站栅格化怎么做ps做游戏下载网站有哪些
  • 公司办网站大概多少钱建网站什么样的域名最好
  • 什么叫做门户网站丽水网站开发公司电话
  • 网站开发 营业执照厦门网站seo哪家好