java - value.serializer 出错(Docker 中的 Spring Boot 和 Kafka)
问题描述
如果我从 fatjar 运行 spring,它会使用 spring 序列化程序,它可以工作(在生产者设置,包中规定org.springframework.kafka.support.serializer.JsonSerializer
),消息序列化没有错误,但是如果你尝试在容器中运行 spring boot,由于某种原因设置不适用,标准com.fasterxml.jackson.databind.JsonSerializer
有效,为什么会这样?
import org.springframework.kafka.support.serializer.JsonSerializer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Configuration
public class KafkaProducerConfig {
@Value("${spring.kafka.bootstrap-servers}")
private String kafkaServer;
@Value("${spring.kafka.producer.client-id}")
private String kafkaProducerId;
@Bean
public Map<String, Object> producerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaServer);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, LongSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
props.put(ProducerConfig.CLIENT_ID_CONFIG, kafkaProducerId);
return props;
}
登录码头:
value.serializer = class com.fasterxml.jackson.databind.JsonSerializer
无法实例化类com.fasterxml.jackson.databind.JsonSerializer
docker-compose 的部分内容:
mvc_app:
container_name: mvc_app
build:
context: zscore_mvc
dockerfile: /docker/mvc/Dockerfile
ports:
- "8080:8080"
depends_on:
- db
- kafka
restart: "no"
zookeeper:
container_name: zookeeper
image: 'bitnami/zookeeper:latest'
ports:
- "2181:2181"
environment:
ALLOW_ANONYMOUS_LOGIN: 'yes'
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
kafka:
image: bitnami/kafka
container_name: kafka
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_CFG_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_CFG_LISTENERS: PLAINTEXT://:9092
KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1:9092
ALLOW_PLAINTEXT_LISTENER: 'yes'
depends_on:
- zookeeper
解决方案
推荐阅读
- c# - Json.Linq.JValue 和 Json.Linq.JObject 的区别
- javascript - express-Node js函数结束前页面刷新
- php - PHP 从插件到数量框 Woocommerce 获取“最小值、最大值、步长和值”变量
- graphviz - 给定一个固定的图形配置,如何绘制一个草书节点簇?
- awk - 对来自不同文件的列进行排序
- google-chrome - 用于打开 devtools 窗口的 Chrome 命令行标志未停靠
- java - 在 Controller 中使用 WebClient 进行 API 调用
- amazon-web-services - 为什么要单独存储 ECS 任务定义机密
- html - 当输入字段宽度超过时,需要移动到新行,输入字段的高度增加
- java - 自 Java 9 起,包私有接口方法的 Javadoc 不再被继承