对象存储操作指南

如果你正在运行本地的 nats-server,请先停止它,并使用 nats-server -js 命令启用 JetStream 重新启动(如果尚未启用)。

然后你可以通过以下命令检查 JetStream 是否已启用:

nats account info

输出应类似于:

Connection Information:

               Client ID: 6
               Client IP: 127.0.0.1
                     RTT: 64.996µs
       Headers Supported: true
         Maximum Payload: 1.0 MiB
           Connected URL: nats://127.0.0.1:4222
       Connected Address: 127.0.0.1:4222
     Connected Server ID: ND2XVDA4Q363JOIFKJTPZW3ZKZCANH7NJI4EJMFSSPTRXDBFG4M4C34K

JetStream Account Information:

           Memory: 0 B of Unlimited
          Storage: 0 B of Unlimited
          Streams: 0 of Unlimited
        Consumers: 0 of Unlimited

如果你看到如下内容,则表示 JetStream 尚未启用:

JetStream Account Information:

   JetStream is not supported in this account

创建对象存储桶

就像你需要创建流后才能使用它们一样,你也需要先创建一个对象存储桶。

nats object add myobjbucket

输出应类似于:

myobjbucket Object Store Status

         Bucket Name: myobjbucket
            Replicas: 1
                 TTL: unlimitd
              Sealed: false
                Size: 0 B
  Backing Store Kind: JetStream
    JetStream Stream: OBJ_myobjbucket

向存储桶中添加文件

nats object put myobjbucket ~/Movies/NATS-logo.mov
1.5 GiB / 1.5 GiB [====================================================================================]

Object information for myobjbucket > /Users/jnmoyne/Movies/NATS-logo.mov

               Size: 1.5 GiB
  Modification Time: 14 Apr 22 00:34 +0000
             Chunks: 12,656
             Digest: sha-256 8ee0679dd1462de393d81a3032d71f43d2bc89c0c8a557687cfe2787e926

通过提供名称向存储桶中添加文件

默认情况下,完整文件路径会被用作键。你可以通过 --name 参数显式指定键(例如相对路径)。

nats object put --name /Movies/NATS-logo.mov myobjbucket ~/Movies/NATS-logo.mov
1.5 GiB / 1.5 GiB [====================================================================================]

Object information for myobjbucket > /Movies/NATS-logo.mov

               Size: 1.5 GiB
  Modification Time: 14 Apr 22 00:34 +0000
             Chunks: 12,656
             Digest: sha-256 8ee0679dd1462de393d81a3032d71f43d2bc89c0c8a557687cfe2787e926

列出存储桶中的对象

nats object ls myobjbucket
╭───────────────────────────────────────────────────────────────────────────╮
│                              Bucket Contents                              │
├─────────────────────────────────────┬─────────┬───────────────────────────┤
│ Name                                │ Size    │ Time                      │
├─────────────────────────────────────┼─────────┼───────────────────────────┤
│ /Users/jnmoyne/Movies/NATS-logo.mov │ 1.5 GiB │ 2022-04-13T17:34:55-07:00 │
│ /Movies/NATS-logo.mov               │ 1.5 GiB │ 2022-04-13T17:35:41-07:00 │
╰─────────────────────────────────────┴─────────┴───────────────────────────╯

从存储桶中获取对象

nats object get myobjbucket ~/Movies/NATS-logo.mov
1.5 GiB / 1.5 GiB [====================================================================================]

Wrote: 1.5 GiB to /Users/jnmoyne/NATS-logo.mov in 5.68s average 279 MiB/s

从存储桶中获取对象并指定输出路径

默认情况下,文件将根据其名称(而非完整路径)存储在本地路径下。要指定输出路径,请使用 --output 参数。

nats object get myobjbucket --output /temp/Movies/NATS-logo.mov /Movies/NATS-logo.mov
1.5 GiB / 1.5 GiB [====================================================================================]

Wrote: 1.5 GiB to /temp/Movies/NATS-logo.mov in 5.68s average 279 MiB/s

从存储桶中移除对象

nats object rm myobjbucket ~/Movies/NATS-logo.mov
? Delete 1.5 GiB byte file myobjbucket > /Users/jnmoyne/Movies/NATS-logo.mov? Yes
Removed myobjbucket > /Users/jnmoyne/Movies/NATS-logo.mov
myobjbucket Object Store Status

         Bucket Name: myobjbucket
            Replicas: 1
                 TTL: unlimitd
              Sealed: false
                Size: 16 MiB
  Backing Store Kind: JetStream
    JetStream Stream: OBJ_myobjbucket

获取存储桶的相关信息

nats object info myobjbucket
myobjbucket Object Store Status

         Bucket Name: myobjbucket
            Replicas: 1
                 TTL: unlimitd
              Sealed: false
                Size: 1.6 GiB
  Backing Store Kind: JetStream
    JetStream Stream: OBJ_myobjbucket

监视存储桶的变化

nats object watch myobjbucket
[2022-04-13 17:51:28] PUT myobjbucket > /Users/jnmoyne/Movies/NATS-logo.mov: 1.5 GiB bytes in 12,656 chunks
[2022-04-13 17:53:27] DEL myobjbucket > /Users/jnmoyne/Movies/NATS-logo.mov

封闭存储桶

你可以封闭存储桶,这意味着不允许对该存储桶进行进一步的更改。

nats object seal myobjbucket
? Really seal Bucket myobjbucket, sealed buckets can not be unsealed or modified Yes
myobjbucket has been sealed
myobjbucket Object Store Status

         Bucket Name: myobjbucket
            Replicas: 1
                 TTL: unlimitd
              Sealed: true
                Size: 1.6 GiB
  Backing Store Kind: JetStream
    JetStream Stream: OBJ_myobjbucket

删除存储桶

使用 nats object rm myobjbucket 命令将删除存储桶及其所有存储的文件。