SpringBoot集成kafka-消息转发@sendTo()注解

SpringBoot集成kafka-消息转发@sendTo

1、消费者

  • 启动消费者进行消息监听,消费者A监听到生产者发送的消息
  • 使用@sendTo()注解将消息转发给消费者B
java 复制代码
package com.power.consumer;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;

@Component
public class EventConsumer {

    @KafkaListener(topics = {"topicA"}, groupId = "aGroup")
    @SendTo("topicB")
    public String onEventA(ConsumerRecord<String, String> record) {
        System.out.println("消费者A接收消息,转发到消费者B record = " + record);
        return record.value() + "--forward message";
    }

    @KafkaListener(topics = {"topicB"}, groupId = "bGroup")
    public void onEventB(ConsumerRecord<String, String> record) {
        System.out.println("消费B消息接收到消费者A转发的消息 record = " + record);
    }

}

2、生产者

java 复制代码
package com.power.producer;

import com.power.model.User;
import com.power.util.JSONUtils;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;

@Component
public class EventProducer {

    @Resource
    private KafkaTemplate<String,Object> kafkaTemplate;

    public void sendEvent(){
        User user = User.builder().id(1).phone("15676767673").birthday(new Date()).build();
        String userJson = JSONUtils.toJSON(user);
        kafkaTemplate.send("topicA","k", userJson);

    }

}

3、实体类对象

java 复制代码
package com.power.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {

    private Integer id;

    private String phone;

    private Date birthday;

}

4、JSON工具类

java 复制代码
package com.power.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JSONUtils {

    private static final ObjectMapper OBJECTMAPPER = new ObjectMapper();

    public static String toJSON(Object object){
        try {
            return OBJECTMAPPER.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }

    public static <T> T toBean(String json,Class<T> clazz){
        try {
            return OBJECTMAPPER.readValue(json,clazz);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }
}

5、配置文件application.yml

java 复制代码
spring:
  application:
    #应用名称
    name: spring-boot-05-kafka-MsgRedirect

  #kafka连接地址(ip+port)
  kafka:
    bootstrap-servers: <你的kafak服务器IP>:9092

    #配置消费者的反序列化
    consumer:
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

6、测试类

java 复制代码
package com.power;

import com.power.producer.EventProducer;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

@SpringBootTest
public class SpringBoot05KafkaBaseApplication {

    @Resource
    private EventProducer eventProducer;

    @Test
    void sendInterceptor(){
        eventProducer.sendEvent();
    }

}

7、测试

  • 先启动消费者进行消息监听
  • 再启动生产者发送消息

消费者A先接收到消息:

消费者B后接收到消费者A转发的消息:

相关推荐
烤麻辣烫12 小时前
黑马程序员苍穹外卖(新手)Day1
java·数据库·spring boot·学习·mybatis
Mr. bigworth13 小时前
三级缓存解决循环依赖的原理
spring boot
WZTTMoon13 小时前
Spring 配置解析与 @Value 注入核心流程详解
java·spring boot·spring
程序定小飞13 小时前
基于springboot的健身房管理系统开发与设计
java·spring boot·后端
wxin_VXbishe14 小时前
springboot在线课堂教学辅助系统-计算机毕业设计源码07741
java·c++·spring boot·python·spring·django·php
南山十一少14 小时前
基于 Spring Boot 与 RabbitMQ 的分布式消息通信机制设计与实现
spring boot·分布式·java-rabbitmq
华仔啊14 小时前
开源一款 SpringBoot3 + Vue3 数据库文档工具,自动生成 Markdown/HTML
vue.js·spring boot·后端
合作小小程序员小小店15 小时前
web网页开发,在线%就业信息管理%系统,基于idea,html,layui,java,springboot,mysql。
java·前端·spring boot·后端·intellij-idea
陈果然DeepVersion15 小时前
Java大厂面试真题:从Spring Boot到AI微服务的三轮技术拷问(一)
java·spring boot·redis·微服务·kafka·面试题·oauth2
爱吃程序猿的喵16 小时前
Spring Boot 常用注解全面解析:提升开发效率的利器
java·spring boot·后端