diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3964272..92bf00f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,6 +29,8 @@ jobs: ports: - 5672:5672 - 15672:15672 + volumes: + - ./conf/:/etc/rabbitmq/ steps: - uses: actions/checkout@v3 diff --git a/conf/enabled_plugins b/conf/enabled_plugins new file mode 100644 index 0000000..ddf4fab --- /dev/null +++ b/conf/enabled_plugins @@ -0,0 +1 @@ +[rabbitmq_stream_management,rabbitmq_consistent_hash_exchange]. diff --git a/docker-compose.yml b/docker-compose.yml index 213634e..a5fe6de 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,3 +10,5 @@ services: environment: RABBITMQ_DEFAULT_USER: "rabbit" RABBITMQ_DEFAULT_PASS: "rabbit" + volumes: + - ./conf/:/etc/rabbitmq/ diff --git a/src/exchange.ts b/src/exchange.ts index 58d32bd..4f73f56 100644 --- a/src/exchange.ts +++ b/src/exchange.ts @@ -4,7 +4,7 @@ export type ExchangeOptions = { arguments: Record auto_delete: boolean durable: boolean - type: ExchangeType + type: ExchangeType | string } export interface ExchangeInfo { @@ -12,7 +12,7 @@ export interface ExchangeInfo { arguments: Record autoDelete: boolean durable: boolean - type: ExchangeType + type: ExchangeType | string } export interface Exchange { diff --git a/src/management.ts b/src/management.ts index 52b66f3..739d90d 100644 --- a/src/management.ts +++ b/src/management.ts @@ -200,6 +200,7 @@ export class AmqpManagement implements Management { type: options.type ?? "direct", durable: options.durable ?? true, auto_delete: options.auto_delete ?? false, + arguments: options.arguments ?? {}, }) .build() diff --git a/test/e2e/management.test.ts b/test/e2e/management.test.ts index bbd84d9..f443784 100644 --- a/test/e2e/management.test.ts +++ b/test/e2e/management.test.ts @@ -114,6 +114,21 @@ describe("Management", () => { }) }) + test("create an exchange with custom type", async () => { + const customType = "x-consistent-hash" // requires plugin rabbitmq_consistent_hash_exchange enabled + const exchange = await management.declareExchange(exchangeName, { + type: customType, + auto_delete: true, + durable: false, + }) + + await eventually(async () => { + const exchangeInfo = await getExchangeInfo(exchange.getInfo.name) + expect(exchangeInfo.ok).to.eql(true) + expect(exchangeInfo.body.type).to.eql(customType) + }) + }) + test("delete an exchange through the management", async () => { await createExchange(exchangeName) await eventually(async () => {