延续 SpringCloudAlibaba学习-06-SpringCloud整合Kafka入门(一)
主要是增加分组和自定义信道
https://blog.csdn.net/xy3233/article/details/122084419
项目结构
pom文件 延续上一章
main函数 延续上一章
自定义通道 MyKafkaChannel.java
import org.springframework.cloud.stream.annotation.Input;
import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;
public interface MyKafkaChannel {
/**
* 缺省发送消息通道名称
*/
String MY_DEFAULT_OUTPUT = "my_default_output";
/**
* 缺省接收消息通道名称
*/
String MY_DEFAULT_INPUT = "my_default_input";
/**
* 告警发送消息通道名称
*/
String MY_ALARM_OUTPUT = "my_alarm_output";
/**
* 告警接收消息通道名称
*/
String MY_ALARM_INPUT = "my_alarm_input";
/**
* 缺省发送消息通道
* @return channel 返回缺省信息发送通道
*/
@Output(MY_DEFAULT_OUTPUT)
MessageChannel sendMyDefaultMessage();
/**
* 告警发送消息通道
* @return channel 返回告警信息发送通道
*/
@Output(MY_ALARM_OUTPUT)
MessageChannel sendMyAlarmMessage();
/**
* 缺省接收消息通道
* @return channel 返回缺省信息接收通道
*/
@Input(MY_DEFAULT_INPUT)
MessageChannel recieveMyDefaultMessage();
/**
* 告警接收消息通道
* @return channel 返回告警信息接收通道
*/
@Input(MY_ALARM_INPUT)
MessageChannel recieveMyAlarmMessage();
}
接受自定义通道的数据 KafkaMessageReceiveListener.java
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.messaging.Sink;
import org.springframework.messaging.Message;
import java.util.Date;
@Slf4j
@EnableBinding(value = MyKafkaChannel.class)
public class KafkaMessageReceiveListener {
/**
* 从缺省通道接收消息
* @param message
*/
@StreamListener(MyKafkaChannel.MY_DEFAULT_INPUT)
public void receive(Message<String> message){
log.info("{}订阅缺省消息:通道 = es_default_input,data = {}", new Date(), message);
}
@StreamListener(MyKafkaChannel.MY_ALARM_INPUT)
public void receiveAlarm(Message<String> message){
log.info("{}订阅告警消息:通道 = my_alarm_input,data = {}", new Date(), message);
}
}
发送消息 KafkaMessageSender.java
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;
@Slf4j
@Component
@EnableBinding(MyKafkaChannel.class)
public class KafkaMessageSender {
@Autowired
private MyKafkaChannel channel;
/**
* 消息发送到默认通道:缺省通道对应缺省主题
*
* @param message
*/
public void sendToDefaultChannel(String message) {
channel.sendMyDefaultMessage().send(MessageBuilder.withPayload(message).build());
}
public void sendToAlarmChannel(String message) {
channel.sendMyAlarmMessage().send(MessageBuilder.withPayload(message).build());
}
}
KafkaSenderController.java 延续上一章