ActiveMQ源码-BrokerService和PersistenceAdapter

activemq-broker 模块 test/java 目录下有个 IDERunner 类:

public class IDERunner {
    private static final boolean TRANSPORT_TRACE = false;

    public static void main(String[]args) throws Exception {
        BrokerService brokerService = new BrokerService();

//        brokerService.addConnector(
//            "tcp://0.0.0.0:61616?trace=" + TRANSPORT_TRACE +
//                "&transport.wireFormat.maxFrameSize=104857600");

        brokerService.setPersistent(false);
        brokerService.setUseJmx(false);
        brokerService.setAdvisorySupport(false);

        brokerService.start();
        brokerService.waitUntilStopped();
    }
}

注释掉 brokerService 调用 addConnector 方法的三行代码,然后 debug 运行该类的 main 方法。

More »

[译]关系数据库设计速成课程

原文链接:https://blog.bytebytego.com/p/a-crash-course-on-relational-database

在当今数据驱动的世界中,高效存储和管理信息是各种规模的企业和组织的关键要求。

关系数据库提供了一个强大的框架,用于根据实体之间明确定义的关系来存储和检索数据。它们提供了一种结构化的数据管理方法,使用户能够:

  • 定义表
  • 建立关系
  • 执行复杂查询以从存储的信息中提取有意义的见解

然而,仅仅使用关系数据库还不足以获得其好处。

有效的数据库设计对于优化性能、确保数据完整性和促进高效的数据检索至关重要。数据库设计原则(例如规范化、索引、连接和关系)在创建结构良好且性能良好的数据库中起着至关重要的作用。

More »

[译]分布式系统速成课程

原文链接:https://blog.bytebytego.com/p/a-crash-course-on-distributed-systems

分布式系统是多台计算机(也称为节点)的集合,它们协作执行特定任务或提供服务。

这些节点在物理上是分开的,并通过网络传递消息相互通信。分布式系统可以跨越地理边界,使其能够利用来自不同位置的资源。

img

分布式系统有几个区别于传统集中式系统的特点:

  • 分布式系统中的计算机在物理上是分开的,并通过网络连接。它们不共享内存或公共时钟。
  • 从外部视角来看,分布式系统对于最终用户来说是一个单一、统一的实体。
  • 分布式系统提供了在系统中添加或删除计算机的灵活性。
  • 分布式系统中的节点需要相互协调并达成一致才能一致地执行操作。
  • 分布式系统中的节点可能独立发生故障,并且消息可能会在网络上丢失或延迟。

分布式系统在我们的日常生活中无处不在。例如 Google 搜索等大型 Web 应用程序、在线银行系统、多人游戏等。这些系统利用多台计算机协同工作,提供无缝且响应迅速的用户体验。

More »

[译]数据库分片速成课程

原文链接:https://blog.bytebytego.com/p/a-crash-course-in-database-sharding

随着应用程序越来越受欢迎,它会吸引更多活跃用户并加入更多功能。这种增长导致每日数据生成量增加,从业务角度来看,这是一个积极的指标。

然而,它也给应用程序的架构带来挑战,特别是在数据库可扩展性方面。

数据库是任何应用程序的关键组件,但它也是最难水平扩展的组件之一。当应用程序的流量和数据量增加时,数据库可能会成为性能瓶颈,影响用户体验。

分片是一种解决数据库横向扩展难题的技术。它涉及将数据库划分为更小、更易于管理的单元(称为分片)。

在这篇文章中,我们将介绍数据库分片的基础知识,探讨其各种方法、技术考虑因素,以及展示公司如何实施分片来扩展其数据库的真实案例研究。

img

什么是分片?

分片是一种架构模式,用于解决管理和查询数据库中大型数据集的难题。它涉及将大型数据库拆分为更小、更易于管理的部分(称为分片)。

More »

[译]数据库扩展策略速成课程

原文链接:https://blog.bytebytego.com/p/a-crash-course-in-database-scaling

数据库是现代应用程序开发的支柱。它们在存储、管理和检索数据方面发挥着至关重要的作用,使应用程序和服务能够有效运行。

随着应用程序越来越受欢迎并吸引越来越多的用户群,数据库面临着处理不断增加的数据量、并发用户和复杂查询的挑战。

有效地扩展数据库以确保最佳性能和良好的用户体验变得至关重要。

数据库扩展是调整和扩展数据库基础架构以适应增长并在负载增加的情况下保持性能的过程。它涉及采用各种技术和策略来有效地分配数据,优化查询执行并明智地利用硬件资源。

组织和开发人员必须了解并实施正确的数据库扩展策略。针对特定情况选择错误的策略可能会弊大于利。

在这篇文章中,我们将详细介绍最流行的数据库扩展策略,讨论它们的优点和权衡。

img

More »

[译]领域驱动设计速成课程

原文链接:https://blog.bytebytego.com/p/a-crash-course-on-domain-driven-design

为复杂领域开发软件是一项具有挑战性的任务。

随着问题领域的复杂性不断增长,创建准确表示业务概念、规则和流程的软件变得越来越困难。设计不良的软件很快就会变成难以理解、难以维护和扩展的混乱代码。

领域驱动设计(DDD)为这个问题提供了解决方案。

DDD 是一种软件开发方法,它通过强调对核心领域和业务逻辑进行建模的重要性并使用这些模型作为软件设计的基础来解决领域复杂性。

领域驱动设计的核心是:

  • 将主要焦点放在核心领域上。
  • 基于领域模型的复杂设计
  • 建立技术专家和领域专家之间的协作。

近年来,领域驱动设计的需求愈发迫切。基于微服务和云计算的架构已导致系统由众多以复杂方式交互的小组件组成。如果没有清晰且定义明确的领域模型来指导其设计,此类系统很快就会变成“一团泥球”。

More »

Github Action 发布 Jar 到 Maven 中央仓库

作为一名 Java 开发者,将自己的项目发布到 Maven 中央仓库是一个非常重要的步骤。这不仅可以让更多的开发者发现和使用您的项目,也可以提高项目的知名度和影响力。

在过去,发布 Jar 到 Maven 中央仓库通常需要手动完成一系列繁琐的步骤,比如:申请 JIRA 账号、创建 Sonatype JIRA Issure、上传 Jar 包、签名 Jar 包等。但是随着 Github Action 的出现,这个过程变得更加自动化和简单。

More »

[译]JMS 2.0 中的新增功能

原文链接:What is new in JMS 2.0

在在软件集成领域,从一个软件组件到另一个软件组件进行通信是一项基本要求。虽然已经出现了许多具有这种能力的技术,但 Java 编程语言为我们提供了一个 API,以促进用 Java 编写的组件之间的消息传递。此 API 的实现将由不同的供应商(JMS 提供商)通过代理软件提供。

More »