From 871aef64f8671e691cf85784a9d94c4120e2220f Mon Sep 17 00:00:00 2001 From: hongawen <83944980@qq.com> Date: Fri, 26 Jun 2026 04:48:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(mq-starter-core):=20=E5=8F=91=E9=80=81?= =?UTF-8?q?=E9=97=A8=E9=9D=A2=20MqTemplate=20+=20DefaultMqTemplate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- .../com/njcn/mq/core/DefaultMqTemplate.java | 15 +++++++++ .../java/com/njcn/mq/core/MqTemplate.java | 6 ++++ .../njcn/mq/core/DefaultMqTemplateTest.java | 32 +++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 mq-starter-core/src/main/java/com/njcn/mq/core/DefaultMqTemplate.java create mode 100644 mq-starter-core/src/main/java/com/njcn/mq/core/MqTemplate.java create mode 100644 mq-starter-core/src/test/java/com/njcn/mq/core/DefaultMqTemplateTest.java diff --git a/mq-starter-core/src/main/java/com/njcn/mq/core/DefaultMqTemplate.java b/mq-starter-core/src/main/java/com/njcn/mq/core/DefaultMqTemplate.java new file mode 100644 index 0000000..9b3df69 --- /dev/null +++ b/mq-starter-core/src/main/java/com/njcn/mq/core/DefaultMqTemplate.java @@ -0,0 +1,15 @@ +package com.njcn.mq.core; +import cn.hutool.core.util.IdUtil; +import com.njcn.mq.spi.MqDriver; + +public class DefaultMqTemplate implements MqTemplate { + private final MqDriver driver; + public DefaultMqTemplate(MqDriver driver) { this.driver = driver; } + + @Override public void send(String topic, Object payload) { send(topic, "", payload); } + + @Override public void send(String topic, String routingKey, Object payload) { + MqMessage msg = MqMessage.of(IdUtil.getSnowflake().nextIdStr(), routingKey, payload); + driver.send(topic, msg); + } +} diff --git a/mq-starter-core/src/main/java/com/njcn/mq/core/MqTemplate.java b/mq-starter-core/src/main/java/com/njcn/mq/core/MqTemplate.java new file mode 100644 index 0000000..cea0525 --- /dev/null +++ b/mq-starter-core/src/main/java/com/njcn/mq/core/MqTemplate.java @@ -0,0 +1,6 @@ +package com.njcn.mq.core; + +public interface MqTemplate { + void send(String topic, Object payload); + void send(String topic, String routingKey, Object payload); +} diff --git a/mq-starter-core/src/test/java/com/njcn/mq/core/DefaultMqTemplateTest.java b/mq-starter-core/src/test/java/com/njcn/mq/core/DefaultMqTemplateTest.java new file mode 100644 index 0000000..cac0139 --- /dev/null +++ b/mq-starter-core/src/test/java/com/njcn/mq/core/DefaultMqTemplateTest.java @@ -0,0 +1,32 @@ +package com.njcn.mq.core; +import com.njcn.mq.spi.MqDriver; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import static org.mockito.Mockito.*; +import static org.junit.jupiter.api.Assertions.*; + +class DefaultMqTemplateTest { + @Test + void send_withRoutingKey_buildsEnvelopeAndDelegates() { + MqDriver driver = mock(MqDriver.class); + MqTemplate t = new DefaultMqTemplate(driver); + t.send("File_Topic", "node-7", "payload-json"); + + ArgumentCaptor cap = ArgumentCaptor.forClass(MqMessage.class); + verify(driver).send(eq("File_Topic"), cap.capture()); + MqMessage m = cap.getValue(); + assertEquals("node-7", m.getTag()); + assertEquals("payload-json", m.getPayload()); + assertNotNull(m.getKey()); + assertTrue(m.getTimestamp() > 0); + } + + @Test + void send_withoutRoutingKey_tagIsEmpty() { + MqDriver driver = mock(MqDriver.class); + new DefaultMqTemplate(driver).send("LN_Topic", "p"); + ArgumentCaptor cap = ArgumentCaptor.forClass(MqMessage.class); + verify(driver).send(eq("LN_Topic"), cap.capture()); + assertEquals("", cap.getValue().getTag()); + } +}