Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
fae542e
:recycle: 名称重构
TAKETODAY Aug 3, 2025
3e24ad3
:construction:
TAKETODAY Aug 3, 2025
dade801
:art:
TAKETODAY Aug 3, 2025
c06f509
:art:
TAKETODAY Aug 3, 2025
0c2c4e1
:art:
TAKETODAY Aug 3, 2025
d153f50
:construction:
TAKETODAY Aug 3, 2025
c2a71f5
:art:
TAKETODAY Aug 3, 2025
95993df
:construction:
TAKETODAY Aug 3, 2025
f7db32a
:construction:
TAKETODAY Aug 3, 2025
6dbeb87
:art:
TAKETODAY Aug 3, 2025
418a529
:art:
TAKETODAY Aug 3, 2025
7988b3a
:art:
TAKETODAY Aug 3, 2025
709ac13
:art:
TAKETODAY Aug 3, 2025
c6a0ce2
:art:
TAKETODAY Aug 3, 2025
a90ef36
:art:
TAKETODAY Aug 3, 2025
e6efdc6
:art:
TAKETODAY Aug 3, 2025
5640d5d
:art:
TAKETODAY Aug 3, 2025
c6a4632
:sparkles: today-remoting-micrometer
TAKETODAY Aug 4, 2025
56045e9
:art:
TAKETODAY Aug 4, 2025
c8c7103
:art:
TAKETODAY Aug 4, 2025
2bfbba9
:fire: 删除 ETCD 模块
TAKETODAY Aug 4, 2025
58ecf05
:art:
TAKETODAY Aug 4, 2025
5bb3633
:art:
TAKETODAY Aug 4, 2025
6940362
:construction:
TAKETODAY Aug 5, 2025
7daf691
:art:
TAKETODAY Aug 5, 2025
0bd9fb7
:art:
TAKETODAY Aug 5, 2025
d4d3d7f
:recycle:
TAKETODAY Aug 5, 2025
38cecdf
:recycle:
TAKETODAY Aug 5, 2025
9b68cb7
:art:
TAKETODAY Aug 5, 2025
a23359c
:fire:
TAKETODAY Aug 5, 2025
c9ebe4e
:art:
TAKETODAY Aug 5, 2025
0ae5be1
:sparkles: 基础设施
TAKETODAY Aug 8, 2025
e5e9bc5
:sparkles: 抽象 Client 层调用
TAKETODAY Aug 10, 2025
84ae630
:sparkles: 抽象 Client 层调用
TAKETODAY Aug 10, 2025
0a1874c
:sparkles: LocalServiceHolder 接口扫描,配置
TAKETODAY Aug 10, 2025
0f29133
:recycle: 通讯层
TAKETODAY Aug 11, 2025
29210a5
:art:
TAKETODAY Aug 11, 2025
e533374
:art: ServiceInstance#getInstanceId
TAKETODAY Aug 11, 2025
ccf8e3e
:recycle: 通讯层
TAKETODAY Aug 11, 2025
a331736
:art:
TAKETODAY Aug 12, 2025
d5bfb4f
:art:
TAKETODAY Aug 15, 2025
6b74d07
:sparkles: 序列化 API 准备
TAKETODAY Aug 17, 2025
317e859
:sparkles: 序列化 API 准备
TAKETODAY Aug 19, 2025
d0e502c
:art: 序列化
TAKETODAY Aug 19, 2025
f54a6da
:art: 序列化
TAKETODAY Aug 21, 2025
4141f4f
:art: 配置 Service provider server
TAKETODAY Aug 22, 2025
de46f5b
:art:
TAKETODAY Aug 22, 2025
d302912
:art: 目录结构重构
TAKETODAY Aug 24, 2025
97006e7
:art: 目录结构重构
TAKETODAY Aug 24, 2025
22e53da
:sparkles:
TAKETODAY Aug 24, 2025
0e18c94
:art:
TAKETODAY Aug 24, 2025
1964613
:art:
TAKETODAY Aug 24, 2025
99f3bde
:art:
TAKETODAY Aug 24, 2025
80a338c
:art:
TAKETODAY Aug 26, 2025
f9b8a15
:art:
TAKETODAY Aug 26, 2025
dbc1fe5
:arrow_up: gradle 9.1.0
TAKETODAY Oct 1, 2025
bb6ffb6
:art:
TAKETODAY Oct 1, 2025
59cf79d
:art:
TAKETODAY Oct 1, 2025
d626124
:art:
TAKETODAY Oct 1, 2025
8e33773
:art:
TAKETODAY Oct 1, 2025
363eea8
:arrow_up: ./gradlew wrapper --gradle-version=9.2.0
TAKETODAY Oct 31, 2025
b67c7f5
:recycle:
TAKETODAY Jan 30, 2026
1097f9e
:arrow_up: 更新 Gradle 版本并配置 Java 编译工具链
TAKETODAY Dec 27, 2025
f181d26
:arrow_up: ./gradlew wrapper --gradle-version=9.3.0
TAKETODAY Jan 30, 2026
311f651
:sparkles: 添加枚举序列化支持功能
TAKETODAY Jan 30, 2026
48b29a3
:art:
TAKETODAY Jan 30, 2026
f6d5b87
:arrow_up: 更新基础架构版本号
TAKETODAY Jan 30, 2026
ea871ac
:art:
TAKETODAY Jan 30, 2026
a191a38
:recycle:
TAKETODAY Jan 30, 2026
286f131
:recycle: 重构消息序列化和队列实现
TAKETODAY Jan 30, 2026
8731f0d
:arrow_up: ./gradlew wrapper --gradle-version=9.4.0
TAKETODAY Mar 9, 2026
25b1e3a
:art:
TAKETODAY Mar 9, 2026
0b58d21
:art:
TAKETODAY Mar 9, 2026
9e46880
:art:
TAKETODAY Mar 9, 2026
ab0c69e
:art: 配置 demo-registry
TAKETODAY Mar 10, 2026
3d0cef6
:art: 注册检查 Service ID
TAKETODAY Mar 10, 2026
c9f820c
:sparkles: 扩展服务元数据支持属性配置
TAKETODAY Mar 10, 2026
626c0a7
:recycle: 重构服务配置属性前缀并优化代码结构
TAKETODAY Mar 10, 2026
50bf2f5
:sparkles: 更新服务元数据配置和加载机制
TAKETODAY Mar 10, 2026
9d7f01a
:sparkles: 添加Gradle插件和服务元数据生成功能
TAKETODAY Mar 11, 2026
6d76fec
:recycle: 重构项目结构
TAKETODAY Mar 15, 2026
a7e738e
:sparkles: 添加服务分组和服务描述元数据支持
TAKETODAY Mar 15, 2026
7ec134c
fix(plugin): 修复服务元数据生成和加载问题
TAKETODAY Mar 15, 2026
8682a0b
:art:
TAKETODAY Mar 15, 2026
47b5a78
:art:
TAKETODAY Mar 15, 2026
5c6277a
:sparkles: 元数据提供
TAKETODAY Mar 15, 2026
0640786
:sparkles: 元数据提供
TAKETODAY Mar 15, 2026
5f3306b
:sparkles: 元数据提供
TAKETODAY Mar 15, 2026
c10db36
:bug: 修复服务元数据生成中的项目目录路径问题
TAKETODAY Mar 15, 2026
6bac5e1
:art: 接口元数据 ServiceMetadata 生成优化
TAKETODAY Mar 16, 2026
3008ec4
:art: ServiceMetadata interfaces 设计成不可变的
TAKETODAY Mar 16, 2026
78937c0
:recycle: 重构序列化接口和实现类
TAKETODAY Mar 16, 2026
e6e7e07
:art: 修改服务器端口配置
TAKETODAY Mar 16, 2026
271ca0f
:recycle: 重构服务提供者序列化组件
TAKETODAY Mar 17, 2026
fe41f29
:art:
TAKETODAY Mar 17, 2026
5909fd5
:art:
TAKETODAY Mar 17, 2026
dd77caf
:art: 添加TCP传输支持并优化远程调用功能
TAKETODAY Mar 17, 2026
c519ee7
:art:
TAKETODAY Mar 18, 2026
616d1ca
:art:
TAKETODAY Mar 18, 2026
38b624d
:sparkles: 添加 Serializable 序列化
TAKETODAY Mar 18, 2026
6f769e5
:art:
TAKETODAY Mar 18, 2026
09678f3
:art: InvocationResult API
TAKETODAY Mar 18, 2026
22d624f
:art: Writable writeNullable API
TAKETODAY Mar 19, 2026
99e243c
:art:
TAKETODAY Mar 19, 2026
a22eae9
:arrow_up: ./gradlew wrapper --gradle-version=9.4.1
TAKETODAY Apr 8, 2026
ddfb38a
:wrench: 添加编译器参数配置
TAKETODAY Apr 8, 2026
93dd2f4
:arrow_up: ./gradlew :wrapper --gradle-version=9.7.0
TAKETODAY Aug 14, 2026
3149a24
:art:
TAKETODAY Aug 15, 2026
826aa63
:arrow_up: API
TAKETODAY Aug 19, 2026
8014ba7
:arrow_up: API
TAKETODAY Aug 30, 2026
07249f4
:arrow_up: ./gradlew :wrapper --gradle-version=9.7.1
TAKETODAY Aug 30, 2026
8e814c8
:arrow_up: ./gradlew :wrapper --gradle-version=9.8.0
TAKETODAY Oct 4, 2026
414c137
:sparkles: 完善 request-response 调用和可扩展异步返回值处理
TAKETODAY Oct 4, 2026
9ca8b7c
:bug: 更新测试依赖并修复服务端停止状态
TAKETODAY Oct 4, 2026
cec0e59
:art: 抽象服务端调用流程并预绑定返回值处理器
TAKETODAY Oct 5, 2026
feac89b
:sparkles: 添加服务端调用拦截机制
TAKETODAY Oct 5, 2026
d0174cb
:sparkles: 支持 RPC 调用元数据传递与紧凑编解码
TAKETODAY Oct 5, 2026
16869a8
:art: 分离请求上下文并精简不可变拦截链
TAKETODAY Oct 6, 2026
24a0b28
:art: 移除拦截链列表暴露及冗余存储
TAKETODAY Oct 6, 2026
986de40
:art: 分离客户端请求上下文与拦截链
TAKETODAY Oct 6, 2026
1688a9c
:art: 收窄拦截器与调用链异常声明
TAKETODAY Oct 6, 2026
9aad5b1
:art: 统一调用结果生命周期并区分单值与流式能力
TAKETODAY Oct 6, 2026
212014b
:sparkles: 补齐流式、双向与 fire-and-forget 服务调用
TAKETODAY Oct 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 15 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Normalize line endings to LF.
* text eol=lf

# Ensure that line endings for DOS batch files are not modified.
*.bat -text

# Ensure the following are treated as binary.
*.gif binary
*.jar binary
*.jpeg binary
*.jpg binary
*.png binary
*.vsd binary
*.class binary
*.clazz binary
20 changes: 20 additions & 0 deletions .github/actions/await-http-resource/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: Await HTTP Resource
description: 'Waits for an HTTP resource to be available (a HEAD request succeeds)'
inputs:
url:
description: 'URL of the resource to await'
required: true
runs:
using: composite
steps:
- name: Await HTTP resource
shell: bash
run: |
url=${{ inputs.url }}
echo "Waiting for $url"
until curl --fail --head --silent ${{ inputs.url }} > /dev/null
do
echo "."
sleep 60
done
echo "$url is available"
101 changes: 101 additions & 0 deletions .github/actions/building/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: 'Build'
description: 'Builds the project, optionally publishing it to a local deployment repository'
inputs:
java-distribution:
description: 'Java distribution to use'
required: false
default: 'liberica'
java-early-access:
description: 'Whether the Java version is in early access'
required: false
default: 'false'
java-toolchain:
description: 'Whether a Java toolchain should be used'
required: false
default: 'false'
java-version:
description: 'Java version to compile and test with'
required: false
default: '24'
publish:
description: 'Whether to publish artifacts ready for deployment to Artifactory'
required: false
default: 'false'
token-password:
description: 'Password for authentication with central.sonatype.com'
required: false
token-username:
description: 'Username for authentication with central.sonatype.com'
required: false
signing-keyId:
description: 'signing keyId'
required: false
signing-password:
description: 'signing password'
required: false
gpg-passphrase:
description: 'Environment variable name for the GPG private key passphrase. Default is $GPG_PASSPHRASE.'
required: false
gpg-private-key:
description: 'GPG private key to import. Default is empty string.'
required: false
server-id:
description: 'ID of the distributionManagement repository in the pom.xml file. Default is `github`'
required: false
default: 'github'
server-username:
description: 'Environment variable name for the username for authentication to the Apache Maven repository. Default is $GITHUB_ACTOR'
required: false
default: 'GITHUB_ACTOR'
server-password:
description: 'Environment variable name for password or token for authentication to the Apache Maven repository. Default is $GITHUB_TOKEN'
required: false
default: 'GITHUB_TOKEN'
outputs:
build-scan-url:
description: 'URL, if any, of the build scan produced by the build'
value: ${{ (inputs.publish == 'true' && steps.publish.outputs.build-scan-url) || steps.build.outputs.build-scan-url }}
version:
description: 'Version that was built'
value: ${{ steps.read-version.outputs.version }}
runs:
using: composite
steps:
- name: Set Up Java
uses: actions/setup-java@v4
with:
distribution: ${{ inputs.java-early-access == 'true' && 'temurin' || (inputs.java-distribution || 'liberica') }}
java-version: |
${{ inputs.java-early-access == 'true' && format('{0}-ea', inputs.java-version) || inputs.java-version }}
${{ inputs.java-toolchain == 'true' && '17' || '' }}
gpg-passphrase: ${{ inputs.gpg-passphrase }}
gpg-private-key: ${{ inputs.gpg-private-key }}
server-id: ${{ inputs.server-id }}
server-username: ${{ inputs.server-username }}
server-password: ${{ inputs.server-password }}

- name: Print JDK Version
shell: bash
run: java -version

- name: Set Up Gradle
uses: gradle/actions/setup-gradle@v4

- name: Build
id: build
if: ${{ inputs.publish == 'false' }}
shell: bash
run: ./gradlew -DCI=true --no-daemon --no-parallel check --scan

- name: Publish
id: publish
if: ${{ inputs.publish == 'true' }}
shell: bash
run: ./gradlew --no-daemon --no-parallel publishMavenPublicationToSonatypeRepository closeAndReleaseStagingRepositories
-PrepoUsername=${{ inputs.token-username }} -PrepoPassword=${{ inputs.token-password }}
-Psigning.keyId=${{ inputs.signing-password }} -Psigning.password=${{ inputs.signing-password }}

- name: Read Version From gradle.properties
id: read-version
uses: ./.github/actions/read-version

24 changes: 24 additions & 0 deletions .github/actions/read-version/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: read-version
author: today
description: Read project version

outputs:
version:
description: 'Version of this project'
value: ${{ steps.read-version.outputs.version }}
snapshot:
description: 'Version is snapshot'
value: ${{ steps.read-version.outputs.snapshot }}
runs:
using: composite
steps:
- name: Read Version From gradle.properties
id: read-version
shell: bash
run: |
version=$(sed -n 's/version=\(.*\)/\1/p' gradle.properties)
snapshot=$(echo $version | grep -q 'SNAPSHOT' && echo 'true' || echo 'false')
echo "Version is $version"
echo "snapshot = $snapshot"
echo "version=$version" >> $GITHUB_OUTPUT
echo "snapshot=$snapshot" >> $GITHUB_OUTPUT
48 changes: 48 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: CI

on:
push:
branches:
- master

pull_request:
branches:
- master
- 'dev/**'
- 'fix/**'
- 'feat/**'
- 'feature/**'

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
check:
if: github.repository_owner == 'today-tech'
runs-on: ${{ matrix.os }}
timeout-minutes: 60
strategy:
matrix:
os: [ ubuntu-latest, macOS-latest ] #, windows-latest
java:
- version: 21
toolchain: true
- version: 24
toolchain: true
fail-fast: false
max-parallel: 4
name: JDK ${{ matrix.java.version }} on ${{ matrix.os }}

steps:
- name: Checkout project sources
uses: actions/checkout@v4.1.2

- name: Build
id: build
uses: ./.github/actions/building
with:
java-early-access: ${{ matrix.java.early-access || 'false' }}
java-distribution: ${{ matrix.java.distribution }}
java-toolchain: ${{ matrix.java.toolchain }}
java-version: ${{ matrix.java.version }}
16 changes: 0 additions & 16 deletions .run/UserServiceApplication.run.xml

This file was deleted.

27 changes: 27 additions & 0 deletions .run/publishToMavenLocal.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="publishToMavenLocal" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="-PskipDocs" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="publishToMavenLocal" />
</list>
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<ExternalSystemDebugDisabled>false</ExternalSystemDebugDisabled>
<DebugAllEnabled>false</DebugAllEnabled>
<RunAsTest>false</RunAsTest>
<GradleProfilingDisabled>false</GradleProfilingDisabled>
<GradleCoverageDisabled>false</GradleCoverageDisabled>
<method v="2" />
</configuration>
</component>
29 changes: 29 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 仓库工作约定

## 格式与文档(必须遵守)

- 保留已有文件完整的版权头及 Apache 2.0 声明;重写文件不能丢失。新 Java 文件使用相邻文件的完整声明格式。
- 保留已有 `@author` 和 `@since` 的原始内容,重构、改名不修改作者或创建时间。新增类型补齐作者和创建日期,遵循相邻文件格式。
- 所有 Javadoc 使用多行 `/** ... */`,包括只有一句描述、一个 `@return` 或 `{@inheritDoc}` 的注释。禁止 `/** @return ... */`、`/** ... */` 这类单行 Javadoc。
- 保持原有多行代码块:方法、构造器、`if`、`try`、`catch`、`finally`、多语句 lambda 不压成一行;方法和字段之间保留空行。
- `.editorconfig`:UTF-8,Java/Groovy 使用 2 空格缩进和 LF,续行缩进为 8。保持原有 import 分组、排序和链式调用换行;不要顺便重排无关代码。
- Javadoc 和源码注释使用英文;模块使用说明、设计文章使用中文,技术名称与代码保留英文。
- Javadoc 说明真实生命周期:构造结果不等于执行完成,观察结果不应启动第二次调用;注明取消、线程与 buffer 所有权,不用过时的签名示例。

## 构建与验证

- 使用根目录 `./gradlew`。构建 toolchain 是 JDK 25,默认字节码 `--release 17`;README 的 JDK 17 标识不能当作构建 JDK 要求。配置见 `buildSrc/src/main/java/infra/cloud/JavaConventions.java`。
- 模块测试:`./gradlew :today-service-provider:test --console=plain`;单类测试:`./gradlew :today-service-provider:test --tests infra.cloud.provider.ServiceInterceptorTests --console=plain`。
- 跨结果/API/两端调用链的修改:`./gradlew :today-service-api:test :today-service-client:test :today-service-provider:test --console=plain`。
- 文档检查:`./gradlew :today-service-provider:javadoc --console=plain`,另运行 `git diff --check`。Javadoc 配置了 `failOnError = false`,任务成功不代表没有文档问题;外部链接可能让生成耗时较长。
- 测试只包含 `*Tests` / `*Test` 类,使用 JUnit Platform;默认 Netty leak detection 为 `paranoid`。沿用 Gradle 测试配置,不手动另配 JVM opens。
- 仓库优先解析 `mavenLocal()`,snapshot/dynamic 依赖缓存时间为零。依赖已缓存时可加 `--offline`;它不会阻止 Javadoc 工具访问外部文档链接。
- `infra.test.app.context.InfraTest` 的应用上下文测试需要模块测试 classpath 包含 `cn.taketoday:infra-app`;`infra-test` 单独不足。

## 代码边界

- 已有 `.codegraph/` 索引,定位符号及调用链优先使用 CodeGraph;配置和文档用直接读取。
- `today-service-api` 放共享请求元数据和结果契约;client/provider 各有自己的拦截链与上下文。两端同名 `InterceptorChain` / `DefaultInterceptorChain` 位于不同包,避免误导入。
- provider 调用接线在 `ServiceProviderAutoConfiguration`;`ServiceMethodResolver` 构建并缓存 `InvocableMethod`,方法预绑定 `ReturnValueHandler`。调用级参数、attributes、metadata 属于 `RemoteRequest`,不能放进共享方法或不可变链节点。
- 跨进程 `Metadata` 与本地 `AttributeAccessor` 分开。服务端在释放入站 Payload 前解码元数据,保存独立快照,不留已释放 ByteBuf 的 slice;本地 attributes 不自动发送。
- provider 边界与扩展方式见 `today-service-provider/README.md`。公开接口不暴露 Mono 并不意味着默认实现已移除 Reactor;不要把未实现的流式接入或依赖移除写成完成状态。
Loading
Loading