🌸 spring 官方推荐使用 streamBridge
生产消费 streamMQ
示例 🌸
官方demo:https://github.com/spring-cloud/spring-cloud-stream-samples/blob/main/streambridge-samples/stream-bridge-avro/src/main/java/com/example/stream/bridge/avro/StreamBridgeAvroApplication.java
🌸 一、yaml配置
spring:
cloud:
stream:
function:
definition: cusnotification;projectmapping
bindings:
projectmapping-out-0:
content-type: application/json
destination: projectmapping-test-topic
group: test-group
binder: rocketmq
rocketmq:
binder:
name-server: 192.168.1.102:9876
bindings:
projectmapping-out-0:
producer:
group: default
cusnotification-out-0:
producer:
group: cusnotification-group
spring:
cloud:
stream:
function:
definition: projectmapping;cusnotification
bindings:
projectmapping-in-0:
content-type: application/json
destination: projectmapping-test-topic
group: test-group
binder: rocketmq
rocketmq:
binder:
name-server: 192.168.1.102:9876
bindings:
projectmapping-in-0:
consumer:
enabled: true
broadcasting: false
orderly: true
🌸 二、生产消费
- 消息配置
- 注意规范配置,不推荐直接写,容易出错。
- 注意规范配置,不推荐直接写,容易出错。
- 注意规范配置,不推荐直接写,容易出错。
public class MessageConstant {
public static final String PROJECT_MAPPING = "projectmapping" + SplitStrConst.LINE;
public static final String OUTPUT = "out" + SplitStrConst.LINE + SplitStrConst.ZERO;
public static final String PROJECT_MAPPING_OUTPUT = PROJECT_MAPPING + OUTPUT;
}
@Data
@Accessors(chain = true)
public class CommonMessaging {
private String msgId;
private String msgText;
}
- 生产者生产消息
- 消息载体自动构建,不要再使用json互转,可直接消费,推荐带上消息唯一ID。
private final StreamBridge streamBridge;
public void streamTestMsg(String msg) {
CommonMessaging testMessaging = new CommonMessaging()
.setMsgId(UUID.randomUUID().toString())
.setMsgText(msg);
streamBridge.send(MessageConstant.PROJECT_MAPPING_OUTPUT, MessageBuilder.withPayload(testMessaging).build());
}
- 消费者消费
- 注意一个消费者只使用一个类
- 注意方法名称即队列名称,不可随意改动
- lambda消费,可直接获取消息题,不要再使用json互转
- 注意log打印
@Component
@Slf4j
public class ProjectMappingConsumer {
@Bean
Consumer<CommonMessaging> projectmapping() {
log.info("projectmapping 初始化订阅成功。");
return msg -> {
log.info("[onMessage][线程编号:{} 消息内容:{}]", Thread.currentThread().getId(), msg.toString());
System.out.println(msg.getMsgText());
};
}
}