feat(mq-starter-core): 发送门面 MqTemplate + DefaultMqTemplate
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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<MqMessage> 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<MqMessage> cap = ArgumentCaptor.forClass(MqMessage.class);
|
||||
verify(driver).send(eq("LN_Topic"), cap.capture());
|
||||
assertEquals("", cap.getValue().getTag());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user