跳到正文

包与 provider 参考 ​

本页按应用要回答的问题组织,而不是按 packages/ 目录布局组织。请从拥有该契约的最小 public package 导入;runtime-specific 行为通过明确的 subpath 暴露。Provider(具体实现方)package 也不是带着一个统一保证、可以彼此随意替换的实现。

怎么读这页 ​

  • Contract:可移植的或与 provider 无关的接口。
  • Provider:由内存、文件、网络服务或原生库提供支持的实现。
  • Lifecycle adapter:围绕应用创建的原生资源包一层 Server wrapper。
  • Evidence:说明仓库支持的证据类型:source/export、声明过的测试,或报告过的本地命令结果。它不会把 package version 变成 npm 发布或生产可用性声明。

当前 source inventory 有 45 个非 private 的 @go-like/* package manifest 和 27 个 public source subpath;在这个 checkout 中它们的版本都是 0.0.1。examples/* 下的 44 个 workspace 是 private applications,不是 public packages。

按任务选择 ​

任务从这里开始按需增加go-like 不拥有
暴露 Web API@go-like/web、@go-like/core@go-like/web/node 或框架的原生 Fetch handlerRouter、framework middleware、auth、response policy
调用内部服务@go-like/client、@go-like/transport@go-like/transport-memory、@go-like/transport-http、@go-like/structBusiness idempotency、generated IDL、全双工 RPC
发现服务实例@go-like/registry一个 Registry provider、filters、一个 SelectorBackend lease/revision consistency 或 global service locator
加载配置@go-like/configenv/file/YAML 或一个外部 Config providerAmbient global configuration 和跨资源事务
保存权威字节数据@go-like/storeMemory、File、Consul、etcd 或 Vault provider通用 database/ORM 或统一的 provider 保证
缓存可丢弃的值@go-like/cacheMemory 或 Redis providerAuthority、persistence、CAS、持久化业务状态
发布或消费字节数据@go-like/brokerMemory、RabbitMQ 或 NATS通用 ack/nack/term、DLQ、持久 offset、exactly-once
增加 typed event payload@go-like/event一个应用自己的 CodecSchema registry、replay、settlement policy
运行已有 scheduler 或 worker@go-like/core@go-like/croner、@go-like/bullmq、@go-like/nats原生 queue、processor、job policy 或 broker connection
增加运维能力@go-like/health、@go-like/resiliencePino、Winston、OTel、PrometheusGlobal instrumentation、auth、deployment policy

基础包 ​

Package用途主要 public APIRuntime 与所有权说明
@go-like/context显式取消、截止时间、cause 和 valuebackground、todo、withCancel、withCancelCause、withDeadline、withDeadlineCause、withTimeout、withTimeoutCause、cause、withoutCancel、withValue、afterFunc、canceled、deadlineExceededPortable source contract。Context 内部使用 AbortSignal;它不是 Go ABI,也不是 DI bag
@go-like/core组合 application 与 resource lifecyclenewApp、server、registrar、beforeStart、afterStart、beforeStop、afterStop、startTimeout、stopTimeout、context、id、name、version、metadata、endpoint、newContext、fromContextPortable structural Server 和 App。Sibling stop calls 是并发的
@go-like/metadata不可变的多值 metadata 与显式传播metadata types 和 propagation functionsClient 与 server metadata domains 分开;metadata 不是可信 identity
@go-like/structtyped endpoints 和 JSON 的 runtime Struct validationstruct、Infer、Struct、StructError当前 public package。它是 runtime validation,不是 Protobuf、IDL 或 generated code。struct.parse 接受本次 errorMap;没有全局 setErrorMap
@go-like/healthLiveness 与 readiness probe registrynewProbeRegistry、ProbeRegistry、Probe、ProbeReport空 liveness 通过;空 readiness fail closed;默认 probe timeout 是 1,000 ms
@go-like/resilience显式 retry、circuit breaker 和 non-blocking rate limitingretry、exponentialBackoff、newCircuitBreaker、newTokenBucketLimiter、circuitOpenRetry authorization 由调用方声明;没有自动幂等判断,也没有后台 limiter task

Web 与内部调用包 ​

Package用途主要 public API不负责
@go-like/web标准 Web Handler 和 request Context bridgeHandler、ContextHandler、contextHandlerRoutes、WebSockets、SSE policy、listener、authentication
@go-like/web/healthHealth Handler routescreateHealthHandlerProbe registration 或 framework route mounting
@go-like/web/node围绕 Fetch Handler 的 Node listenernewNodeServer、hostname、port、nodeShutdownTimeoutInternal HTTP Transport TLS/HTTP2;这些用 @go-like/transport-http/node
@go-like/client内部 unary calls、discovery、selection、middleware、retries、poolingnewClient、withTransport、withEndpoint、withDiscovery、withSelector、withFilter、withBlock、withRetry、middleware、use、circuitBreakerMiddleware、closeTimeout、poolSize、poolTtlFramework routes、business replay safety、physical socket limits
@go-like/server内部 JSON 与 SSE server 和 route dispatchnewServer、transport、address、advertise、Server.registerHandler、httpRoute、middleware、use、listenOption、rateLimitMiddleware框架路由器与应用授权
@go-like/transportTransport SPI 与 Fetch Request/ResponseTransport、Client、Listener、defineService、ServerStream、TransportInfo、Endpoint、endpoint、chain、serviceError除非选择 provider,否则不提供具体 wire;没有 internal full-duplex promise
@go-like/transport-memory进程内 unary TransportnewMemoryTransport跨进程行为、持久化、网络 fallback、TLS
@go-like/transport-http基于 Fetch 的内部 HTTP TransportnewHTTPTransport、executor、maxMessageBytes没有注入 HTTPHost 时,不是完整的 portable listener;也不提供原生 Node TLS controls
@go-like/transport-http/node原生 Node internal HTTP TransportnewNodeHTTPTransport、allowHTTP1、clientAuth自动安全策略
@go-like/transport-grpc-bufConnect/gRPC-Web unary, server-streamingnewHandler, fromHandlerContext, callOptions基于 Protobuf-ES 的 Context-first 生成代码
@go-like/transport-grpc-buf/native/native 提供标准 gRPC 四种调用形态newClient, newServerDiscovery, Selector, TLS/mTLS
@go-like/protoc-gen-like构建时 Node 生成器protoc-gen-like, protocGenLikeProtobuf-ES

Config 包 ​

Package 或 subpath用途主要 function边界
@go-like/configConfig manager 和 object sourcesnewConfig、source、objectSource、schema、resolver、placeholderResolver、onReloadError、onTerminalErrorImmutable snapshots 和已接纳的 watcher lifecycle;自身不是 Core Server
@go-like/config/env显式的 environment record sourceenvSource接收注入的 record;不读取 ambient runtime globals
@go-like/config/fileFile source 和 JSON decoder contractfileSource、jsonFileDecoder需要显式的 file capability
@go-like/config/nodeNode file capabilitynewNodeFileCapabilityRuntime-specific Node subpath
@go-like/config/yaml把 YAML 解码成 ConfigObjectdecodeYamlDecoding 不是 source watching 或 schema publication
@go-like/config-consulConsul HTTP configuration sourceconsulSource、jsonConsulDecoderConsul blocking-query 和 consistency behavior
@go-like/config-etcdetcd gateway configuration sourceetcdSource、jsonEtcdDecoderRevision、compaction 和 gateway protocol behavior
@go-like/config-kubernetes一个 Kubernetes ConfigMap 或 Secret keykubernetesSource、jsonKubernetesDecoderResource-version/relist semantics;没有跨资源事务
@go-like/config-vaultVault KV v2 sourcevaultSourceVault authentication、TLS、token policy 和 KV semantics

Config external providers 使用注入的标准 Fetch。凭据和 redirects 的安全行为取决于 provider;http 还是 https 由应用或部署决定,除非 provider 主动拒绝。

Registry 包 ​

Package用途主要 functionRuntime/backend 说明
@go-like/registryContract、snapshot、filters、selectorsfilterVersion、filterLabel、newRandomSelector、newRoundRobinSelector、newWeightedRoundRobinSelector、newP2CSelector、newEWMASelectorComplete replacement snapshots;selection feedback 是显式的
@go-like/registry/providerProvider author helpers 和 registration diagnosticsproviderOptions、notifyRegistrationError、snapshot/provider helpers面向 provider 的 subpath,不是普通应用入口
@go-like/registry-consulConsul registration 和 discoverynewConsulRegistryHealth-filtered、blocking-query、TTL/critical 行为由 Consul 原生决定
@go-like/registry-etcdetcd registration 和 discoverynewEtcdRegistryLeases、revisions、watch/relist、compaction 行为
@go-like/registry-kubernetesEndpointSlice discovery 和可选 registrationnewKubernetesRegistryKubernetes EndpointSlice、owner references;不虚构 TTL
@go-like/registry-mdns本地 multicast discoverynewMDNSRegistryRoot provider 按设计可移植;UDP host 在 /node
@go-like/registry-mdns/nodeNode UDP multicast capabilitynewNodeMDNSHost明确的 Node runtime subpath
@go-like/registry-zookeeperZooKeeper ephemeral registration 和 discoverynewZookeeperRegistry文档支持 Node.js 和 Bun

Registry 保存的是可达性状态,不是持久业务数据。Provider 在重建临时 watcher 时可以保留上一份 snapshot,但权威的空 snapshot 必须 fail closed。

Store 与 Cache 包 ​

Package用途主要 function边界
@go-like/storeRecord contract 和 optionsexpiresIn、ifAbsent、ifRevision、prefix、limit、cursorRevisions、CAS、TTL、pagination;各 provider 的能力不同
@go-like/store/providerProvider write/delete/list helperswriteOptions、deleteOptions、listOptions、snapshot 和 conflict helpers面向 provider;自身不是 durable backend
@go-like/store-memory进程内 Store testsnewMemoryStore、clock没有重启持久化或跨进程状态
@go-like/store-file本地 file StorenewFileStore单所有者本地状态;Node host 使用 /node
@go-like/store-file/nodeNode file capabilitynewNodeFileStoreHost明确的 Node subpath
@go-like/store-consulConsul KV StorenewConsulStoreConsul sessions、TTL/CAS combinations,以及不确定的 mutation behavior
@go-like/store-etcdetcd KV StorenewEtcdStoreGateway、lease、revision、compaction 和不确定的 mutation behavior
@go-like/store-vaultVault KV v2 StorenewVaultStore不承诺统一的 Store TTL/CAS semantics
@go-like/cacheDisposable value/TTL contractexpiresIn没有 CAS、revision、durability 或 authority
@go-like/cache-memory进程内 cachenewMemoryCache、clock没有持久化;lazy expiry;适合测试和本地加速
@go-like/cache-redisRedis-backed cachenewRedisCache原生 Redis connection、URL credential handling 和 runtime requirements 仍然可见

Broker、event 与工作包 ​

Package 或 subpath用途主要 function边界
@go-like/brokerByte/topic Broker contractnewBrokerServer没有 portable ack/nack/term、DLQ、retry 或 durable offset
@go-like/broker/providerProvider terminal registrationregisterSubscriberTerminal、subscriberTerminal面向 provider 的 lifecycle bookkeeping
@go-like/broker-memoryExact-topic 进程内 brokernewMemoryBroker实例私有、broadcast、没有 durable settlement
@go-like/broker-rabbitmqRabbitMQ borrowed、confirm 或 recovering brokernewRabbitMqBroker、newConfirmRabbitMqBroker、newRecoveringRabbitMqBrokeramqplib channel/connection 和原生 settlement semantics
@go-like/eventBroker 之上的 typed codeceventBroker原生 delivery 仍可见;没有 replay 或 schema registry
@go-like/natsNATS lifecycle 和原生 broker entrypointsnewNatsCoreServer、natsCoreDrainTimeoutCore connection 和 subscription semantics 仍是原生的
@go-like/nats/brokerNATS Core BrokernewNatsCoreBroker原生 Msg、queue group、drain 和 at-most-once semantics
@go-like/nats/jetstreamJetStream ConsumerMessages lifecyclenewNatsJetStreamServer、natsJetStreamCloseTimeout原生 ConsumerMessages close/stop/closed behavior
@go-like/nats/jetstream/brokerJetStream 上的 typed byte BrokernewNatsJetStreamBrokerJsMsg、PubAck、ack/nak/term、redelivery 和 DLQ 仍是原生语义
@go-like/croner已有 Croner jobs 的 lifecyclenewCronerServerCroner schedule、callback、overlap 和 passive terminal semantics
@go-like/bullmq已有 BullMQ Worker 的 lifecyclenewBullMqWorkerServer、bullMqWorkerShutdownTimeoutQueue、Redis、processor、retry/backoff、stalled jobs 和 job identity

日志与可观测性包 ​

Package用途主要 function不负责
@go-like/pinoPino request/broker wrappers 和 drain lifecyclelogClient、logUnaryMiddleware、logWebHandler、logBroker、newPinoServer、pinoDrainTimeoutLogger construction、destination policy、redaction、global setup
@go-like/winstonWinston wrappers 和 shutdown lifecyclelogging wrappers、newWinstonServerLogger/transports 以及它们原生的 finish/close semantics
@go-like/otel显式的 OpenTelemetry trace/metric wrappersnewOtelServer、traceClient、traceUnaryMiddleware、traceWebHandler、traceBroker、measureClient、measureClientMiddleware、measureUnaryMiddleware、newRequestMetricsGlobal providers、exporters、context manager、automatic instrumentation
@go-like/prometheusPrometheus request metrics 和 scrape HandlernewRequestMetrics、measureClient、measureUnaryMiddleware、measureWebHandler、measureBroker、createPrometheusHandlerGlobal Registry、供给 Registry 之外的 collectors、background tasks

完整的 public source subpath 清单 ​

以下是当前 package manifests 声明的 27 个显式 source subpath。生成的 packages 可能额外导出 metadata-only 的 ./package.json;那不是 source API。

#Subpath主要 exports面向对象
1@go-like/broker/providerregisterSubscriberTerminal、subscriberTerminalProvider authors
2@go-like/cache/providerputOptionsProvider authors
3@go-like/config/envenvSourceApplication authors
4@go-like/config/filefileSource、jsonFileDecoderApplication authors
5@go-like/config/nodenewNodeFileCapabilityNode runtime authors
6@go-like/config/yamldecodeYamlApplication authors
7@go-like/core/lifecyclewaitForContextLifecycle/provider authors
8@go-like/core/nodesignalNode/Bun process integration
9@go-like/nats/brokernewNatsCoreBrokerNATS Core applications
10@go-like/nats/jetstreamnewNatsJetStreamServer、natsJetStreamCloseTimeoutJetStream applications
11@go-like/nats/jetstream/brokernewNatsJetStreamBrokerJetStream Broker applications
12@go-like/registry/providerprovider options 和 snapshot helpersProvider authors
13@go-like/registry-mdns/nodenewNodeMDNSHostNode mDNS applications
14@go-like/store/providerwrite/delete/list options 和 snapshotsProvider authors
15@go-like/store-file/nodenewNodeFileStoreHostNode file Store applications
16@go-like/struct/codecencodeJson、decodeJsonTyped contract authors
17@go-like/struct/runtimeintrospection 和 parsing helpersRuntime/provider authors
18@go-like/transport/headersGo-Like-Metadata, Go-Like-Timeout-MsTransport/provider authors
19@go-like/transport/jsonencodeJsonBody、decodeJsonBody、jsonContentTypeTyped/raw transport authors
20@go-like/transport/providermetadata、ServiceError codecs、transport errors 和 observeCallProvider authors
21@go-like/transport-http/nodenewNodeHTTPTransport、allowHTTP1、clientAuthNode HTTP applications
22@go-like/web/healthcreateHealthHandlerWeb applications
23@go-like/web/nodenewNodeServer、hostname、port、nodeShutdownTimeoutNode Web host applications
24@go-like/client/discoverynewDiscoveryResolver, DiscoveryResolver应用作者
25@go-like/transport-grpc-buf/nativenewClient, newServer应用作者
26@go-like/transport/sseencodeSSEComment, encodeSSEEvent, encodeSSEJsonEvent, eventStreamContentTypeSSE server streams
27@go-like/web/bunnewBunServer, hostname, port, bunShutdownTimeoutWeb applications

@go-like/otel/testing 和 @go-like/web/node/testing 既不是 TypeScript path mappings,也不是当前 package manifest exports。不要把它们写成 public entrypoints。

Runtime 选择矩阵 ​

Entry 或 provider familyPortable sourceBun/Node native证据措辞
Context、Core root、Health、Metadata、Resilience、StructYes不需要 native importSource contract;发布措辞前检查当前已执行的 matrix
Web root 和 Web healthYes需要单独的 hostHandler 可移植;Handler 不是 listener
Memory Transport、Memory Store、Memory Cache、Memory BrokerProcess-local source不需要 external service不是 distributed、durable 或 cross-process
HTTP root 与 Fetch-backed Config/Registry/Store providersInjected FetchRuntime 选择 Fetch可以按 source 或已声明 runtime lane 说可移植,不要承诺 universal parity
/node subpathsNoNode-specific,部分可在 Bun 执行显式 import 会改变 runtime graph
NATS、RabbitMQ、BullMQ、Redis、Pino、Winston、OTel native SDKsProvider-dependentNode/Bun fixtures 或 package-specific runtime evidence阅读 provider README 和 E2E scope
ZooKeeperNoNode/Bun不要从 Registry root 推广结论

Function 选择规则 ​

  • 需要 Context 时,在 Web edge 使用 contextHandler,不要自造 framework request bag。
  • 一个进程拥有多个 admitted resource,或者需要明确 signal 和 shutdown ownership 时,使用 newApp 和 server(...)。
  • 两端都需要共享 runtime Struct validation 时,使用 typed server.registerHandler(endpoint, handler);如果应用拥有另一种字节契约,则使用 raw server.registerHandler(service, endpoint, handler).
  • 直连路由在构造 Client 时使用 withEndpoint(...)。Discovery 同时使用 withEndpoint("discovery:///<name>") 与 withDiscovery(...),不要把直连地址和 Discovery 混用。两种地址源使用同一个 Selector。
  • 只有服务确实需要它们增加的 control-plane 行为时,才使用 withSelector(...)、withFilter(...) 和 withBlock()。
  • 只有写清楚 replay authorization、最大总尝试次数、failure predicate 和 business idempotency 后,才使用 withRetry(...)。
  • 用 newMemoryStore 做确定性的测试,不要用它做 durability 声明。
  • 用 newMemoryCache 做可丢弃的加速,不要把它当作 appointment 或 payment authority。
  • 用 newBrokerServer 把一个 subscription 接进 Core,不要因此得到通用 queue worker 或 settlement API。
  • 只有在 application 已创建 native provider 或 registry 后,才使用 newOtelServer、newPinoServer、newWinstonServer 或 Prometheus Handler。

明确排除项 ​

@go-like/protoc-gen-like 基于 Protobuf-ES 生成 Context-first Protobuf RPC 代码。@go-like/transport-grpc-buf 的 Fetch 入口支持 Connect/gRPC-Web 的 unary 和 server-streaming;/native 提供标准 gRPC 的四种调用形态,包括 client-streaming 和 bidi。这是独立于内部 Fetch/SSE 路径的调用路径。

这不包含浏览器标准 gRPC、Fetch request-streaming/bidi、官方 health/reflection、通用认证、Event Store/replay、ORM 或集群编排。

Node 26.12.1 与 Bun 1.4.4 的托管 gRPC 已通过慢消费者 drain 回归;Connect 2.1.2 与 Bun 1.4.2 Fetch 的历史取消与停机限制仍未验证已修复。