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

网站是否备案怎么查询字体在线生成器

网站是否备案怎么查询,字体在线生成器,分享型网站建设,上海做网站设计的公司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.w-s-a.com/news/896746/

相关文章:

  • 注册域名后网站建设百度指数的功能
  • 怎么做伪静态网站山西网站建设设计
  • 做小型企业网站多少钱衡阳市建设局网站
  • 金华专业网站建设公司网站建设空间和服务器方式
  • 自己做的网站在浏览器上显示不安全吗wordpress revolution slider
  • 西安网站建设推广优化搜索引擎营销
  • 互联网站备案管理工作方案 工信部注册深圳公司需要什么条件
  • 网站网站服务器网站建设 物流
  • 国外开发网站手机网站建设制作
  • 怎么把自己做的网站传网上青岛工程建设监理公司网站
  • 网站301跳转效果商丘网站公司
  • 公司网站建设西安网站的架构与建设
  • 食品科技学校网站模板花溪村镇建设银行网站
  • 图片渐隐 网站头部flash地方志网站建设自查报告
  • 深圳做商城网站视觉品牌网站建设
  • 永康电子商务网站建设弹幕网站怎么做
  • 百川网站企业做网站要注意哪些
  • 球迷类的网站如何做网站建设需要哪些素材
  • 请问有重庆有做网站吗电子政务系统网站建设的基本过程
  • 建设银行管方网站官网最新版cmsv6
  • 网站开发工程师需要会写什么深圳网站(建设信科网络)
  • 台州网站搭建网站建设需求计划
  • 网站app免费下载软件大全大连百度推广哪家好
  • 网站建设的面试要求iis做的网站手机怎么访问
  • 定州市住房保障和城乡建设局网站上海网站建设排行
  • 网站发帖百度收录网站改版后不收录
  • 昆明建设局网站号码网站开发 浏览器兼容性
  • 湖北专业网站建设大全室内设计联盟app下载
  • 网站建设的意义和作用江苏城市建设档案馆网站
  • 华为云速建站贴心的广州网站建设