INTEGRITY Документация

Durable Object Stub

Описание

DurableObjectStub интерфейс представляет собой клиент для вызова методов на удалённом Durable Object. Тип DurableObjectStub является обобщённым, что позволяет вызывать RPC-методы на стабе.

Durable Objects реализуют семантику E-order, концепцию, восходящую к язык распределённого программирования E ↗. При выполнении нескольких вызовов одного и того же Durable Object гарантируется, что они будут доставлены удалённому Durable Object в том порядке, в котором были сделаны. Семантика E-order упрощает решение многих задач распределённого программирования. E-order реализуется с помощью Cap'n Proto ↗ распределённый RPC протокол на основе object capability, который Cloudflare Workers использует для внутренних коммуникаций.

Если Durable Object выбрасывает исключение заглушку, все выполняемые и последующие вызовы завершатся ошибкой с исключения. Чтобы продолжить вызывать методы удалённого Durable Object, Worker должен заново создать заглушку. Между разными заглушками порядок вызовов не гарантируется.

import { DurableObject } from "cloudflare:workers";

// Durable Object
export class MyDurableObject extends DurableObject {
	constructor(ctx, env) {
		super(ctx, env);
	}

	async sayHello() {
		return "Hello, World!";
	}
}

// Worker
export default {
	async fetch(request, env) {
		// A stub is a client used to invoke methods on the Durable Object
		const stub = env.MY_DURABLE_OBJECT.getByName("foo");

		// Methods on the Durable Object are invoked via the stub
		const rpcResponse = await stub.sayHello();

		return new Response(rpcResponse);
	},
};
import { DurableObject } from "cloudflare:workers";

export interface Env {
	MY_DURABLE_OBJECT: DurableObjectNamespace<MyDurableObject>;
}

// Durable Object
export class MyDurableObject extends DurableObject {
	constructor(ctx: DurableObjectState, env: Env) {
		super(ctx, env);
	}

	async sayHello(): Promise<string> {
		return "Hello, World!";
	}
}

// Worker
export default {
	async fetch(request, env) {
		// A stub is a client used to invoke methods on the Durable Object
		const stub = env.MY_DURABLE_OBJECT.getByName("foo");

		// Methods on the Durable Object are invoked via the stub
		const rpcResponse = await stub.sayHello();

		return new Response(rpcResponse);
	},
} satisfies ExportedHandler<Env>;

Свойства

id

id является свойством DurableObjectStub соответствующий DurableObjectId используемый для создания stub.

const id = env.MY_DURABLE_OBJECT.newUniqueId();
const stub = env.MY_DURABLE_OBJECT.get(id);
console.assert(id.equals(stub.id), "This should always be true");
id = env.MY_DURABLE_OBJECT.newUniqueId()
stub = env.MY_DURABLE_OBJECT.get(id)
assert id.equals(stub.id), "This should always be true"

name

name является необязательным свойством DurableObjectStub, который возвращает имя, если оно было указано при создании stub, либо напрямую через DurableObjectNamespace::getByName или косвенно через DurableObjectId созданный DurableObjectNamespace::idFromName. Это значение не определено, если DurableObjectId используемый для создания DurableObjectStub был создан с использованием DurableObjectNamespace::newUniqueId.

const stub = env.MY_DURABLE_OBJECT.getByName("foo");
console.assert(stub.name === "foo", "This should always be true");
stub = env.MY_DURABLE_OBJECT.getByName("foo")
assert stub.name == "foo", "This should always be true"