• Spring In Action 5 学习笔记 chapter8 Kafka发送接收消息 要点


      本文记录Sping In Action5 第8章 发送异步消息Kafka中的踩坑情况。

    第8章的源码请自行github或gitee搜索,或参考一下。

    GitHub - habuma/spring-in-action-5-samples: Home for example code from Spring in Action 5.

    drop1et/spring-in-action-5-samples

    目录

    目录

    目录

    环境

    Kafka在SpringBoot程序中的应用

    环境

    消息发送

    依赖

    application.properties关键部分

    关键代码KafkaOrderMessagingService

    RestController部分代码

    消息接收

    依赖

    application.propertites中关键部分

    踩坑提示

    消息接收代码-推模型

    测试消息发送与接收

    其他-关于IDEA中一个Project项目内包含多个子工程及添加单向依赖的办法

    环境

    win7 x64

    jdk 1.8

    idea 2018.3

    Kafka在SpringBoot程序中的应用

    环境

    Kafka依赖于zookeeper需要先安装zookeeper

    zookeeper版本:apache-zookeeper-3.8.0-bin

    Kafka版本号:kafka_2.13-3.2.3

    下载、安装、启动步骤请网搜。
     

    安装的基本参考(不要参考此文中的测试命令,测试命令已过时)https://www.cnblogs.com/azhuya/p/15125433.html


    测试命令参考(将linux下的bin/XXX.sh 改为window下的.\bin\windows\XXX.bat  )https://kafka.apache.org/quickstart

    注意使用cmd窗口将zookeeper及kafka分别启动后,不要关闭cmd窗口,以便保留程序。

    本文kafka服务器与开发程序在同一机器上,暂未考虑跨域问题。

    消息发送

    依赖

    1. <dependency>
    2. <groupId>org.springframework.kafka</groupId>
    3. <artifactId>spring-kafka</artifactId>
    4. </dependency>

    application.properties关键部分

    1. #kafka 配置
    2. #kafka broker 集群服务器地址端口(可以是多个地址)端口默认为9092
    3. spring.kafka.bootstrap-servers=localhost:9092
    4. #kafka设置key的序列化器
    5. spring.kafka.producer.key-serializer=org.springframework.kafka.support.serializer.JsonSerializer
    6. #kafka设置value的序列化器
    7. spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer

    关键代码KafkaOrderMessagingService

    1. package com.wdh.tacocloud.messaging;
    2. import com.wdh.tacocloud.domain.Order;
    3. import lombok.extern.slf4j.Slf4j;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.kafka.core.KafkaTemplate;
    6. import org.springframework.kafka.support.SendResult;
    7. import org.springframework.stereotype.Service;
    8. import org.springframework.util.concurrent.ListenableFuture;
    9. /**
    10. * @author WangDH
    11. * @create 2022-09-27 14:32
    12. */
    13. @Slf4j
    14. @Service
    15. public class KafkaOrderMessagingService implements OrderMessagingService {
    16. private KafkaTemplate<String,Order> kafkaTemplate;
    17. @Autowired
    18. public KafkaOrderMessagingService(KafkaTemplate<String,Order> kafkaTemplate) {
    19. this.kafkaTemplate = kafkaTemplate;
    20. }
    21. @Override
    22. public void sendOrder(Order order) {
    23. log.info("KafkaOrderMessagingService start sendOrder start.");
    24. //本代码环境
    25. //java版本:java version "1.8.0_111"
    26. //zookeeper版本:apache-zookeeper-3.8.0-bin
    27. //kafka版本:kafka_2.13-3.2.3
    28. String topic="wdhtacocloud-events";//"quickstart-events";//注意:本程序启动前,需要手动通过kafka手工创建名为【wdhtacocloud-events】的topic,且不要乱写数据以防止反序列化失败
    29. ListenableFuture<SendResult<String,Order>> result= kafkaTemplate.send(topic,order);
    30. log.info("KafkaOrderMessagingService start sendOrder end.");
    31. }
    32. }

    RestController部分代码

    1. package com.wdh.tacocloud.api;
    2. import com.wdh.tacocloud.data.OrderRepository;
    3. import com.wdh.tacocloud.domain.Order;
    4. import com.wdh.tacocloud.messaging.OrderMessagingService;
    5. import lombok.extern.slf4j.Slf4j;
    6. import org.springframework.dao.EmptyResultDataAccessException;
    7. import org.springframework.http.HttpStatus;
    8. import org.springframework.web.bind.annotation.*;
    9. import java.text.SimpleDateFormat;
    10. import java.util.Date;
    11. import java.util.Optional;
    12. /**
    13. * @author WangDH
    14. * @create 2022-09-23 9:55
    15. */
    16. @Slf4j
    17. @RestController
    18. @RequestMapping(path="/orders",produces = "application/json")
    19. @CrossOrigin(origins = "*")
    20. public class OrderApiController {
    21. private OrderRepository orderRepo;
    22. private OrderMessagingService orderMessagingService;
    23. public OrderApiController(OrderRepository orderRepo
    24. ,OrderMessagingService orderMessagingService
    25. ) {
    26. this.orderMessagingService=orderMessagingService;
    27. this.orderRepo = orderRepo;
    28. }
    29. @GetMapping("/")
    30. public String getDefault(){
    31. log.info("######### OrderApiController enter getDefault");
    32. return "ok,this is OrderApiController getDefault return";
    33. }
    34. @GetMapping("/sendMQ")
    35. public String sendMQ(){
    36. log.info("######### OrderApiController enter sendMQ Kafka");
    37. Date date=new Date();
    38. SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    39. String time=formatter.format(date);
    40. Order order=new Order();
    41. order.setId((long) 81);
    42. order.setDeliveryName("jmsTestName"+time);
    43. orderMessagingService.sendOrder(order);
    44. return "ok,this is OrderApiController sendMQ Kafka return。time="+time;
    45. }
    46. @PutMapping("/{orderId}")
    47. public Order putOrder(@RequestBody Order order){
    48. Order orderSaved=orderRepo.save(order);
    49. return orderSaved;
    50. }
    51. }

    消息接收

    要点1:使用kafka时,springboot只提供了依赖监听器的【推模型】OrderListener,并没有【拉模型】

    消息接收端程序采用SpringMVC+Thymeleaf

    依赖

    1. <dependency>
    2. <groupId>org.springframework.kafka</groupId>
    3. <artifactId>spring-kafka</artifactId>
    4. </dependency>

    application.propertites中关键部分

    1. #kafka 配置
    2. #kafka broker 集群服务器地址端口(可以是多个地址)端口默认为9092
    3. spring.kafka.bootstrap-servers=localhost:9092
    4. #kafka 设置消费者端的group id
    5. spring.kafka.consumer.group-id=tacocloud_kitchen
    6. #设置从kafka取数据的偏移量
    7. #spring.kafka.consumer.auto-offset-reset=latest
    8. #kafka 设置消费者端对key的反序列化器
    9. spring.kafka.consumer.key-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
    10. #kafka 设置消费者端对value的反序列化器(注意,不是JsonSerializer)
    11. spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
    12. #kafka 需要在消费者端设置对消息对象的包设置信任,否则会报错【Consumer exception java.lang.IllegalStateException: This error handler cannot process 'SerializationException's directly; please consider configuring an 'ErrorHandlingDeserializer' in the value and/or key deserializer】
    13. # 注意错误排查2,因kafka会自动对消息队列中的历史消息进行反序列化,如果消息队列历史有乱消息,建议新建topic,以保证队列中的消息全为合法的可反序列化的数据
    14. spring.kafka.consumer.properties.spring.json.trusted.packages:*

    踩坑提示

    #kafka 需要在消费者端application.properties设置对消息对象的包设置信任,否则会报错【Consumer exception java.lang.IllegalStateException: This error handler cannot process 'SerializationException's directly; please consider configuring an 'ErrorHandlingDeserializer' in the value and/or key deserializer】
    
    spring.kafka.consumer.properties.spring.json.trusted.packages:*

      # 注意错误排查2,因kafka会自动对消息队列中的历史消息进行反序列化,如果消息队列历史有乱消息,建议新建topic,以保证队列中的消息全为合法的可反序列化的数据

    消息接收代码-推模型

    1. package com.wdh.tacocloud_kitchen.kitchen.messaging.kafka.listener;
    2. import com.wdh.tacocloud_kitchen.KitchenUI;
    3. import com.wdh.tacocloud.domain.Order;
    4. import lombok.extern.slf4j.Slf4j;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.kafka.annotation.KafkaListener;
    7. import org.springframework.kafka.support.KafkaHeaders;
    8. import org.springframework.messaging.Message;
    9. import org.springframework.messaging.MessageHeaders;
    10. import org.springframework.stereotype.Component;
    11. /**
    12. * @author WangDH
    13. * @create 2022-09-29 17:09
    14. */
    15. @Slf4j
    16. @Component
    17. public class OrderListener {
    18. private KitchenUI kitchenUI;
    19. @Autowired
    20. public OrderListener(KitchenUI kitchenUI) {
    21. this.kitchenUI = kitchenUI;
    22. }
    23. //方式1
    24. // @KafkaListener(topics="quickstart-events")
    25. // public void handle(Order order){
    26. // kitchenUI.displayOrder(order);
    27. // }
    28. //方式2
    29. @KafkaListener(topics="wdhtacocloud-events")//"quickstart-events") //注意:本程序启动前,需要手动通过kafka手工创建名为【wdhtacocloud-events】的topic,且不要乱写数据以防止反序列化失败
    30. public void handle(Order order, Message<Order> message){
    31. MessageHeaders headers=message.getHeaders();
    32. log.info("OrderListener Receive from partition {} with timestamp {}",
    33. headers.get(KafkaHeaders.RECEIVED_PARTITION_ID),
    34. headers.get(KafkaHeaders.RECEIVED_TIMESTAMP)
    35. );
    36. kitchenUI.displayOrder(order);
    37. }
    38. }

    测试消息发送与接收

    1.保证zookeeper和kafka正在运行中,通过windows cmd窗口创建一个topic,并且不用往topic里推送数据。

    cmd kafka创建topic(示例主题名为wdhtacocloud-events),细节不赘述

    1. Microsoft Windows [版本 6.1.7601]
    2. 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
    3. D:\JavaDevEnv\kafka_2.13-3.2.3>.\bin\windows\kafka-topics.bat --create --topic wdhtacocloud-events --bootstrap-server localhost:9092
    4. Created topic quickstart-events.
    5. D:\JavaDevEnv\kafka_2.13-3.2.3>

    2.启动发送端springboot程序TacocloudApplication(端口8090)

    IDEA输出日志如下

    1. "C:\Program Files\Java\jdk1.8.0_111\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\JavaDevEnv\JetBrains\IntelliJ IDEA 2018.3.6\lib\idea_rt.jar=6258:D:\JavaDevEnv\JetBrains\IntelliJ IDEA 2018.3.6\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_111\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\rt.jar;D:\JavaWorkspace\IdeaProjects\SpringInAction\ch08_kafka\tacocloud\target\classes;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter\2.3.7.RELEASE\spring-boot-starter-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot\2.3.7.RELEASE\spring-boot-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-autoconfigure\2.3.7.RELEASE\spring-boot-autoconfigure-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-logging\2.3.7.RELEASE\spring-boot-starter-logging-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\JavaDevEnv\maven_repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\JavaDevEnv\maven_repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.3\log4j-to-slf4j-2.13.3.jar;D:\JavaDevEnv\maven_repository\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;D:\JavaDevEnv\maven_repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;D:\JavaDevEnv\maven_repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-core\5.2.12.RELEASE\spring-core-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-jcl\5.2.12.RELEASE\spring-jcl-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\yaml\snakeyaml\1.26\snakeyaml-1.26.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-web\2.3.7.RELEASE\spring-boot-starter-web-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-json\2.3.7.RELEASE\spring-boot-starter-json-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\com\fasterxml\jackson\core\jackson-databind\2.11.3\jackson-databind-2.11.3.jar;D:\JavaDevEnv\maven_repository\com\fasterxml\jackson\core\jackson-core\2.11.3\jackson-core-2.11.3.jar;D:\JavaDevEnv\maven_repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.3\jackson-datatype-jdk8-2.11.3.jar;D:\JavaDevEnv\maven_repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.3\jackson-datatype-jsr310-2.11.3.jar;D:\JavaDevEnv\maven_repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.11.3\jackson-module-parameter-names-2.11.3.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-tomcat\2.3.7.RELEASE\spring-boot-starter-tomcat-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.41\tomcat-embed-core-9.0.41.jar;D:\JavaDevEnv\maven_repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.41\tomcat-embed-websocket-9.0.41.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-web\5.2.12.RELEASE\spring-web-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-webmvc\5.2.12.RELEASE\spring-webmvc-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-expression\5.2.12.RELEASE\spring-expression-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-devtools\2.3.7.RELEASE\spring-boot-devtools-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\projectlombok\lombok\1.18.16\lombok-1.18.16.jar;D:\JavaDevEnv\maven_repository\Mysql\mysql-connector-java\8.0.22\mysql-connector-java-8.0.22.jar;D:\JavaDevEnv\maven_repository\org\springframework\data\spring-data-commons\2.3.6.RELEASE\spring-data-commons-2.3.6.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-beans\5.2.12.RELEASE\spring-beans-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-jdbc\2.3.7.RELEASE\spring-boot-starter-jdbc-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\com\zaxxer\HikariCP\3.4.5\HikariCP-3.4.5.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-jdbc\5.2.12.RELEASE\spring-jdbc-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-hateoas\2.3.7.RELEASE\spring-boot-starter-hateoas-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\hateoas\spring-hateoas\1.1.3.RELEASE\spring-hateoas-1.1.3.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\plugin\spring-plugin-core\2.0.0.RELEASE\spring-plugin-core-2.0.0.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-data-rest\2.3.7.RELEASE\spring-boot-starter-data-rest-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\data\spring-data-rest-webmvc\3.3.6.RELEASE\spring-data-rest-webmvc-3.3.6.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\data\spring-data-rest-core\3.3.6.RELEASE\spring-data-rest-core-3.3.6.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\atteo\evo-inflector\1.2.2\evo-inflector-1.2.2.jar;D:\JavaDevEnv\maven_repository\com\fasterxml\jackson\core\jackson-annotations\2.11.3\jackson-annotations-2.11.3.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-validation\2.3.7.RELEASE\spring-boot-starter-validation-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\glassfish\jakarta.el\3.0.3\jakarta.el-3.0.3.jar;D:\JavaDevEnv\maven_repository\org\hibernate\validator\hibernate-validator\6.1.6.Final\hibernate-validator-6.1.6.Final.jar;D:\JavaDevEnv\maven_repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;D:\JavaDevEnv\maven_repository\org\jboss\logging\jboss-logging\3.4.1.Final\jboss-logging-3.4.1.Final.jar;D:\JavaDevEnv\maven_repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-security\2.7.3\spring-boot-starter-security-2.7.3.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-aop\5.2.12.RELEASE\spring-aop-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\security\spring-security-config\5.3.6.RELEASE\spring-security-config-5.3.6.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\security\spring-security-core\5.3.6.RELEASE\spring-security-core-5.3.6.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\security\spring-security-web\5.3.6.RELEASE\spring-security-web-5.3.6.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\kafka\spring-kafka\2.5.10.RELEASE\spring-kafka-2.5.10.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-context\5.2.12.RELEASE\spring-context-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-messaging\5.2.12.RELEASE\spring-messaging-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-tx\5.2.12.RELEASE\spring-tx-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\retry\spring-retry\1.2.5.RELEASE\spring-retry-1.2.5.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\apache\kafka\kafka-clients\2.5.1\kafka-clients-2.5.1.jar;D:\JavaDevEnv\maven_repository\com\github\luben\zstd-jni\1.4.4-7\zstd-jni-1.4.4-7.jar;D:\JavaDevEnv\maven_repository\org\lz4\lz4-java\1.7.1\lz4-java-1.7.1.jar;D:\JavaDevEnv\maven_repository\org\xerial\snappy\snappy-java\1.1.7.3\snappy-java-1.1.7.3.jar;D:\JavaDevEnv\maven_repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;D:\JavaDevEnv\maven_repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;D:\JavaDevEnv\maven_repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;D:\JavaDevEnv\maven_repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar" com.wdh.tacocloud.TacocloudApplication
    2. . ____ _ __ _ _
    3. /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
    4. ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
    5. \\/ ___)| |_)| | | | | || (_| | ) ) ) )
    6. ' |____| .__|_| |_|_| |_\__, | / / / /
    7. =========|_|==============|___/=/_/_/_/
    8. :: Spring Boot :: (v2.3.7.RELEASE)
    9. 2022-09-30 15:45:08.088 INFO 4292 --- [ restartedMain] com.wdh.tacocloud.TacocloudApplication : Starting TacocloudApplication on 14JPYI7CBESDNFK with PID 4292 (D:\JavaWorkspace\IdeaProjects\SpringInAction\ch08_kafka\tacocloud\target\classes started by Administrator in D:\JavaWorkspace\IdeaProjects\SpringInAction\ch08_kafka)
    10. 2022-09-30 15:45:08.091 INFO 4292 --- [ restartedMain] com.wdh.tacocloud.TacocloudApplication : No active profile set, falling back to default profiles: default
    11. 2022-09-30 15:45:08.138 INFO 4292 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
    12. 2022-09-30 15:45:08.138 INFO 4292 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
    13. 2022-09-30 15:45:09.542 INFO 4292 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8090 (http)
    14. 2022-09-30 15:45:09.550 INFO 4292 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat]
    15. 2022-09-30 15:45:09.551 INFO 4292 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41]
    16. 2022-09-30 15:45:09.612 INFO 4292 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
    17. 2022-09-30 15:45:09.613 INFO 4292 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1474 ms
    18. 2022-09-30 15:45:10.498 INFO 4292 --- [ restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
    19. 2022-09-30 15:45:10.897 INFO 4292 --- [ restartedMain] .s.s.UserDetailsServiceAutoConfiguration :
    20. Using generated security password: 30069a17-5b95-4214-be96-e9b902958a22
    21. 2022-09-30 15:45:11.081 INFO 4292 --- [ restartedMain] o.s.s.web.DefaultSecurityFilterChain : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@b0c1ab7, org.springframework.security.web.context.SecurityContextPersistenceFilter@79c4c3c3, org.springframework.security.web.header.HeaderWriterFilter@73900d00, org.springframework.security.web.csrf.CsrfFilter@4238e65c, org.springframework.security.web.authentication.logout.LogoutFilter@5860fbc4, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@42f01e09, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@6145b16d, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@44e072da, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@569bb6b1, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@6fb1983c, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@529c50b, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@1d7fee86, org.springframework.security.web.session.SessionManagementFilter@437c38fc, org.springframework.security.web.access.ExceptionTranslationFilter@2bd26abf, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@75044ac5]
    22. 2022-09-30 15:45:11.154 INFO 4292 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
    23. 2022-09-30 15:45:11.188 INFO 4292 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8090 (http) with context path ''
    24. 2022-09-30 15:45:11.198 INFO 4292 --- [ restartedMain] com.wdh.tacocloud.TacocloudApplication : Started TacocloudApplication in 3.562 seconds (JVM running for 4.255)

    因引入了Spring Security,所有控制台打印的user的密码为

    1. 2022-09-30 15:45:10.897 INFO 4292 --- [ restartedMain] .s.s.UserDetailsServiceAutoConfiguration :
    2. Using generated security password: 30069a17-5b95-4214-be96-e9b902958a22

      

    3.启动接收端springboot程序TacocloudKitchenApplication(端口8082)

    IDEA输出日志如下

    1. "C:\Program Files\Java\jdk1.8.0_111\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\JavaDevEnv\JetBrains\IntelliJ IDEA 2018.3.6\lib\idea_rt.jar=6276:D:\JavaDevEnv\JetBrains\IntelliJ IDEA 2018.3.6\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_111\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\rt.jar;D:\JavaWorkspace\IdeaProjects\SpringInAction\ch08_kafka\tacocloud_kitchen_kafka\target\classes;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-thymeleaf\2.3.7.RELEASE\spring-boot-starter-thymeleaf-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter\2.3.7.RELEASE\spring-boot-starter-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-logging\2.3.7.RELEASE\spring-boot-starter-logging-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\JavaDevEnv\maven_repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\JavaDevEnv\maven_repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.3\log4j-to-slf4j-2.13.3.jar;D:\JavaDevEnv\maven_repository\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;D:\JavaDevEnv\maven_repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;D:\JavaDevEnv\maven_repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\JavaDevEnv\maven_repository\org\yaml\snakeyaml\1.26\snakeyaml-1.26.jar;D:\JavaDevEnv\maven_repository\org\thymeleaf\thymeleaf-spring5\3.0.11.RELEASE\thymeleaf-spring5-3.0.11.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\thymeleaf\thymeleaf\3.0.11.RELEASE\thymeleaf-3.0.11.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\attoparser\attoparser\2.0.5.RELEASE\attoparser-2.0.5.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\unbescape\unbescape\1.1.6.RELEASE\unbescape-1.1.6.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;D:\JavaDevEnv\maven_repository\org\thymeleaf\extras\thymeleaf-extras-java8time\3.0.4.RELEASE\thymeleaf-extras-java8time-3.0.4.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-web\2.3.7.RELEASE\spring-boot-starter-web-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-json\2.3.7.RELEASE\spring-boot-starter-json-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\com\fasterxml\jackson\core\jackson-databind\2.11.3\jackson-databind-2.11.3.jar;D:\JavaDevEnv\maven_repository\com\fasterxml\jackson\core\jackson-annotations\2.11.3\jackson-annotations-2.11.3.jar;D:\JavaDevEnv\maven_repository\com\fasterxml\jackson\core\jackson-core\2.11.3\jackson-core-2.11.3.jar;D:\JavaDevEnv\maven_repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.3\jackson-datatype-jdk8-2.11.3.jar;D:\JavaDevEnv\maven_repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.3\jackson-datatype-jsr310-2.11.3.jar;D:\JavaDevEnv\maven_repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.11.3\jackson-module-parameter-names-2.11.3.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-starter-tomcat\2.3.7.RELEASE\spring-boot-starter-tomcat-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.41\tomcat-embed-core-9.0.41.jar;D:\JavaDevEnv\maven_repository\org\glassfish\jakarta.el\3.0.3\jakarta.el-3.0.3.jar;D:\JavaDevEnv\maven_repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.41\tomcat-embed-websocket-9.0.41.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-web\5.2.12.RELEASE\spring-web-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-beans\5.2.12.RELEASE\spring-beans-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-webmvc\5.2.12.RELEASE\spring-webmvc-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-aop\5.2.12.RELEASE\spring-aop-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-expression\5.2.12.RELEASE\spring-expression-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-devtools\2.3.7.RELEASE\spring-boot-devtools-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot\2.3.7.RELEASE\spring-boot-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\boot\spring-boot-autoconfigure\2.3.7.RELEASE\spring-boot-autoconfigure-2.3.7.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\projectlombok\lombok\1.18.16\lombok-1.18.16.jar;D:\JavaDevEnv\maven_repository\org\springframework\kafka\spring-kafka\2.5.10.RELEASE\spring-kafka-2.5.10.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-context\5.2.12.RELEASE\spring-context-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-messaging\5.2.12.RELEASE\spring-messaging-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-tx\5.2.12.RELEASE\spring-tx-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\retry\spring-retry\1.2.5.RELEASE\spring-retry-1.2.5.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\apache\kafka\kafka-clients\2.5.1\kafka-clients-2.5.1.jar;D:\JavaDevEnv\maven_repository\com\github\luben\zstd-jni\1.4.4-7\zstd-jni-1.4.4-7.jar;D:\JavaDevEnv\maven_repository\org\lz4\lz4-java\1.7.1\lz4-java-1.7.1.jar;D:\JavaDevEnv\maven_repository\org\xerial\snappy\snappy-java\1.1.7.3\snappy-java-1.1.7.3.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-core\5.2.12.RELEASE\spring-core-5.2.12.RELEASE.jar;D:\JavaDevEnv\maven_repository\org\springframework\spring-jcl\5.2.12.RELEASE\spring-jcl-5.2.12.RELEASE.jar;D:\JavaWorkspace\IdeaProjects\SpringInAction\ch08_kafka\tacocloud\target\classes" com.wdh.tacocloud_kitchen.TacocloudKitchenApplication
    2. . ____ _ __ _ _
    3. /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
    4. ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
    5. \\/ ___)| |_)| | | | | || (_| | ) ) ) )
    6. ' |____| .__|_| |_|_| |_\__, | / / / /
    7. =========|_|==============|___/=/_/_/_/
    8. :: Spring Boot :: (v2.3.7.RELEASE)
    9. 2022-09-30 15:45:45.536 INFO 5712 --- [ restartedMain] c.w.t.TacocloudKitchenApplication : Starting TacocloudKitchenApplication on 14JPYI7CBESDNFK with PID 5712 (D:\JavaWorkspace\IdeaProjects\SpringInAction\ch08_kafka\tacocloud_kitchen_kafka\target\classes started by Administrator in D:\JavaWorkspace\IdeaProjects\SpringInAction\ch08_kafka)
    10. 2022-09-30 15:45:45.540 INFO 5712 --- [ restartedMain] c.w.t.TacocloudKitchenApplication : No active profile set, falling back to default profiles: default
    11. 2022-09-30 15:45:45.591 INFO 5712 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
    12. 2022-09-30 15:45:45.591 INFO 5712 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
    13. 2022-09-30 15:45:46.575 INFO 5712 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8082 (http)
    14. 2022-09-30 15:45:46.583 INFO 5712 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat]
    15. 2022-09-30 15:45:46.584 INFO 5712 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.41]
    16. 2022-09-30 15:45:46.648 INFO 5712 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
    17. 2022-09-30 15:45:46.648 INFO 5712 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1057 ms
    18. 2022-09-30 15:45:46.819 INFO 5712 --- [ restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
    19. 2022-09-30 15:45:46.930 WARN 5712 --- [ restartedMain] org.thymeleaf.templatemode.TemplateMode : [THYMELEAF][restartedMain] Template Mode 'HTML5' is deprecated. Using Template Mode 'HTML' instead.
    20. 2022-09-30 15:45:47.046 WARN 5712 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : Unable to start LiveReload server
    21. 2022-09-30 15:45:47.098 INFO 5712 --- [ restartedMain] o.a.k.clients.consumer.ConsumerConfig : ConsumerConfig values:
    22. allow.auto.create.topics = true
    23. auto.commit.interval.ms = 5000
    24. auto.offset.reset = latest
    25. bootstrap.servers = [localhost:9092]
    26. check.crcs = true
    27. client.dns.lookup = default
    28. client.id =
    29. client.rack =
    30. connections.max.idle.ms = 540000
    31. default.api.timeout.ms = 60000
    32. enable.auto.commit = false
    33. exclude.internal.topics = true
    34. fetch.max.bytes = 52428800
    35. fetch.max.wait.ms = 500
    36. fetch.min.bytes = 1
    37. group.id = tacocloud_kitchen
    38. group.instance.id = null
    39. heartbeat.interval.ms = 3000
    40. interceptor.classes = []
    41. internal.leave.group.on.close = true
    42. isolation.level = read_uncommitted
    43. key.deserializer = class org.springframework.kafka.support.serializer.JsonDeserializer
    44. max.partition.fetch.bytes = 1048576
    45. max.poll.interval.ms = 300000
    46. max.poll.records = 500
    47. metadata.max.age.ms = 300000
    48. metric.reporters = []
    49. metrics.num.samples = 2
    50. metrics.recording.level = INFO
    51. metrics.sample.window.ms = 30000
    52. partition.assignment.strategy = [class org.apache.kafka.clients.consumer.RangeAssignor]
    53. receive.buffer.bytes = 65536
    54. reconnect.backoff.max.ms = 1000
    55. reconnect.backoff.ms = 50
    56. request.timeout.ms = 30000
    57. retry.backoff.ms = 100
    58. sasl.client.callback.handler.class = null
    59. sasl.jaas.config = null
    60. sasl.kerberos.kinit.cmd = /usr/bin/kinit
    61. sasl.kerberos.min.time.before.relogin = 60000
    62. sasl.kerberos.service.name = null
    63. sasl.kerberos.ticket.renew.jitter = 0.05
    64. sasl.kerberos.ticket.renew.window.factor = 0.8
    65. sasl.login.callback.handler.class = null
    66. sasl.login.class = null
    67. sasl.login.refresh.buffer.seconds = 300
    68. sasl.login.refresh.min.period.seconds = 60
    69. sasl.login.refresh.window.factor = 0.8
    70. sasl.login.refresh.window.jitter = 0.05
    71. sasl.mechanism = GSSAPI
    72. security.protocol = PLAINTEXT
    73. security.providers = null
    74. send.buffer.bytes = 131072
    75. session.timeout.ms = 10000
    76. ssl.cipher.suites = null
    77. ssl.enabled.protocols = [TLSv1.2]
    78. ssl.endpoint.identification.algorithm = https
    79. ssl.key.password = null
    80. ssl.keymanager.algorithm = SunX509
    81. ssl.keystore.location = null
    82. ssl.keystore.password = null
    83. ssl.keystore.type = JKS
    84. ssl.protocol = TLSv1.2
    85. ssl.provider = null
    86. ssl.secure.random.implementation = null
    87. ssl.trustmanager.algorithm = PKIX
    88. ssl.truststore.location = null
    89. ssl.truststore.password = null
    90. ssl.truststore.type = JKS
    91. value.deserializer = class org.springframework.kafka.support.serializer.JsonDeserializer
    92. 2022-09-30 15:45:47.153 INFO 5712 --- [ restartedMain] o.a.kafka.common.utils.AppInfoParser : Kafka version: 2.5.1
    93. 2022-09-30 15:45:47.153 INFO 5712 --- [ restartedMain] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: 0efa8fb0f4c73d92
    94. 2022-09-30 15:45:47.153 INFO 5712 --- [ restartedMain] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1664523947152
    95. 2022-09-30 15:45:47.155 INFO 5712 --- [ restartedMain] o.a.k.clients.consumer.KafkaConsumer : [Consumer clientId=consumer-tacocloud_kitchen-1, groupId=tacocloud_kitchen] Subscribed to topic(s): wdhtacocloud-events
    96. 2022-09-30 15:45:47.157 INFO 5712 --- [ restartedMain] o.s.s.c.ThreadPoolTaskScheduler : Initializing ExecutorService
    97. 2022-09-30 15:45:47.174 INFO 5712 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8082 (http) with context path ''
    98. 2022-09-30 15:45:47.183 INFO 5712 --- [ restartedMain] c.w.t.TacocloudKitchenApplication : Started TacocloudKitchenApplication in 2.012 seconds (JVM running for 2.658)
    99. 2022-09-30 15:45:47.396 INFO 5712 --- [ntainer#0-0-C-1] org.apache.kafka.clients.Metadata : [Consumer clientId=consumer-tacocloud_kitchen-1, groupId=tacocloud_kitchen] Cluster ID: nIA89HDbRKqR88ZJ-aUlHA
    100. 2022-09-30 15:45:47.396 INFO 5712 --- [ntainer#0-0-C-1] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer-tacocloud_kitchen-1, groupId=tacocloud_kitchen] Discovered group coordinator 14JPYI7CBESDNFK:9092 (id: 2147483647 rack: null)
    101. 2022-09-30 15:45:47.396 INFO 5712 --- [ntainer#0-0-C-1] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer-tacocloud_kitchen-1, groupId=tacocloud_kitchen] (Re-)joining group
    102. 2022-09-30 15:45:47.411 INFO 5712 --- [ntainer#0-0-C-1] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer-tacocloud_kitchen-1, groupId=tacocloud_kitchen] Join group failed with org.apache.kafka.common.errors.MemberIdRequiredException: The group member needs to have a valid member id before actually entering a consumer group
    103. 2022-09-30 15:45:47.411 INFO 5712 --- [ntainer#0-0-C-1] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer-tacocloud_kitchen-1, groupId=tacocloud_kitchen] (Re-)joining group
    104. 2022-09-30 15:45:47.411 INFO 5712 --- [ntainer#0-0-C-1] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer-tacocloud_kitchen-1, groupId=tacocloud_kitchen] Finished assignment for group at generation 19: {consumer-tacocloud_kitchen-1-c66ce8ef-8c01-494b-8cea-9f55f310241e=Assignment(partitions=[wdhtacocloud-events-0])}
    105. 2022-09-30 15:45:47.411 INFO 5712 --- [ntainer#0-0-C-1] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=consumer-tacocloud_kitchen-1, groupId=tacocloud_kitchen] Successfully joined group with generation 19
    106. 2022-09-30 15:45:47.427 INFO 5712 --- [ntainer#0-0-C-1] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer-tacocloud_kitchen-1, groupId=tacocloud_kitchen] Adding newly assigned partitions: wdhtacocloud-events-0
    107. 2022-09-30 15:45:47.427 INFO 5712 --- [ntainer#0-0-C-1] o.a.k.c.c.internals.ConsumerCoordinator : [Consumer clientId=consumer-tacocloud_kitchen-1, groupId=tacocloud_kitchen] Setting offset for partition wdhtacocloud-events-0 to the committed offset FetchPosition{offset=5, offsetEpoch=Optional.empty, currentLeader=LeaderAndEpoch{leader=Optional[14JPYI7CBESDNFK:9092 (id: 0 rack: null)], epoch=0}}
    108. 2022-09-30 15:45:47.427 INFO 5712 --- [ntainer#0-0-C-1] o.s.k.l.KafkaMessageListenerContainer : tacocloud_kitchen: partitions assigned: [wdhtacocloud-events-0]

    4.打开浏览器输入【http://localhost:8090/orders/sendMQ】以调用发送端程序的rest服务,回车后因spring security要求先输入用户名user,再根据idea中提示的密码复制过来再回车,登录后,网页提示消息已发送。

      

    5.接收端【推模式】,在发送端已发送消息后,在IDEA的控制台中即可看到TacocloudKitchenApplication程序输出的日志显示OrderListener已收到消息。

     

    其他-关于IDEA中一个Project项目内包含多个子工程及添加单向依赖的办法

    1.IDEA中Create Project时先创建Empty Project

    2.打开Empty Project后点击New-Module.../Module from existing source,可以将子工程以Module的形式添加到该Project中

    3.B子工程依赖于A子工程的包(例如domain包),可从IDEA-File-Project Structure-Project Settings-Modules,选中B工程,在右侧点击+号图标添加3.Module dependency,选中A子工程,下图就是为tacocloud_kitchen_kafka工程添加对tacocloud工程的依赖。

      

    4.调试时在Run Dashboard中可点击切换查看两个工程的日志输出

  • 相关阅读:
    Springboot+学生作业管理系统 毕业设计-附源码251208
    RSA的一些数论知识
    实验7 数据库编程
    C++ 多线程
    ES6之Map和Set有什么不同?
    利用噪声构建美妙的 CSS 图形
    MySQL【变量、流程控制与游标】
    记录我常用的linux(centOS)命令
    linux SHELL技巧
    从苏宁电器到卡巴斯基(第二部)第33篇:我当高校教师的这几年 IX
  • 原文地址:https://blog.csdn.net/wangdonghao137/article/details/127124271