跳到正文

套件同 provider 參考 ​

呢頁係按應用想解答嘅問題整理,唔係照 packages/ 目錄排。由真正擁有契約嘅最細 public package import;runtime-specific 行為會由明確 subpath 暴露。Provider 套件唔係有一套通用保證、可以任意互換嘅實作,揀之前要睇清楚 backend、runtime 同 ownership。

點樣睇呢頁 ​

  • Contract:可攜式或與 provider 無關的介面。
  • Provider:由記憶體、檔案、網路服務或原生函式庫支援的實作。
  • Lifecycle adapter:圍繞應用程式建立的原生資源包上一層 Server wrapper。
  • Evidence:指出 repository 支援的證據類型: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 application,唔係 public package。

按工作揀入口 ​

工作從這裡開始需要時再加上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明確的取消、deadline、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。Siblings 的 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 的生命週期 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

Logging 與可觀測性套件 ​

Package用途主要 function不負責
@go-like/pinoPino request/broker wrapper 與 drain lifecyclelogClient、logUnaryMiddleware、logWebHandler、logBroker、newPinoServer、pinoDrainTimeoutLogger construction、destination policy、redaction、global setup
@go-like/winstonWinston wrapper 與 shutdown lifecyclelogging wrappers、newWinstonServerLogger/transports 與它們原生的 finish/close semantics
@go-like/otel明確的 OpenTelemetry trace/metric wrappernewOtelServer、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 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 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 嘅歷史取消同停機限制仍未驗證已修復。