我试图将多个主题加载到一个主题中,@KafkaListener但遇到了麻烦,因为我相信它正在寻找一个常量值,但是topics从application.yml文件中初始化变量会导致一些问题,我想知道是否有人可以帮助我解决这个问题,或者指导我如何将多个 Kafka 主题加载到单个 KafkaListener 中。
@KafkaListener通过将它们传递到逗号分隔的对象中,我可以收听相同的多个主题,如下所示:
@KafkaListener(topics = {
"flight-events",
"flight-time-events",
"service-events",
"flight-delay-events"
})
Run Code Online (Sandbox Code Playgroud)
我意识到我可以用逗号分隔的值来表示主题,但我希望能够通过配置文件添加主题,而不是更改代码库中的代码。
我相信可能存在的问题是@KafkaListener 需要接受一个常量值,而我无法将注释定义为常量,有什么办法可以解决这个问题吗?
KafkaWebSocketConnector.java
@Component
public class KafkaWebSocketConnector
{
@Value("${spring.kafka.topics}")
private String[] topics;
@KafkaListener(topics = topics)
public void listen(ConsumerRecord<?, Map<String, String>> message)
{
log.info("Received messages on topic [{}]: [{}]", message.topic(), message.value());
String dest = "/" + message.topic();
log.info("destination = {}", dest);
log.info("msg: {}", message);
messageTemplate.convertAndSend(dest, message.value());
}
}
Run Code Online (Sandbox Code Playgroud)
application.yml
spring:
kafka:
consumer:
auto-offset-reset: earliest
group-id: kafka-websocket-connector
topics: flight-events,
flight-time-events, …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Kafka主题连接到前端Java Spring应用程序。我正在使用Docker Compose,并尝试使用两个不同的Kafka映像进行连接。
使用wurstmeister / kafka,我可以通过该服务在我的docker.compose.yml文件中启动和运行Kafka主题。但是我无法将创建的主题连接到前端Java Spring应用程序。
kafka:
image: wurstmeister/kafka:0.10.2.0
ports:
- "9092:9092"
expose:
- "9092"
- "2181"
environment:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_CREATE_TOPICS: "test-topic1:1:1, test-topic2:1:1"
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- zookeeper
Run Code Online (Sandbox Code Playgroud)
其次,使用spotify / kafka,我很难用Kafka创建主题。在文档中,它正在寻找主题作为环境变量,但是以下docker-compose.yml服务并未创建主题。我也尝试在引号周围加上引号,test-topic但效果不佳。
kafka:
image: spotify/kafka
ports:
- "9092:9092"
- "2181:2181"
hostname: kafka
expose:
- "9092"
- "2181"
environment:
TOPICS: test-topic
Run Code Online (Sandbox Code Playgroud)
我不知道这是否有必要,但是我的整个docker-compose.yml文件如下,请注意,仅当您使用时,zookeeper服务才是必需的wurstmeister/kafka。
docker-compose.yml
version: '2'
services:
# zookeeper:
# image: wurstmeister/zookeeper
# ports:
# …Run Code Online (Sandbox Code Playgroud) 我很难使用 Docker Compose 将这些容器链接在一起,先说一下我目前也在 Mac 上运行。
该应用程序目前无需使用 Docker Compose 即可运行,因为如果我单独运行这些内容(不使用 Docker),应用程序将按预期运行。
正如预期的那样,这意味着应用程序正在从 Redis 读取数据,并提取某些 Kafka 主题中的数据并将其显示在前端。
关于我认为必要的文件。
docker-compose.yml
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka:0.10.2.0
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_CREATE_TOPICS: "flight-events:1:1,reported-flight-time-events:1:1,pax-flight-events:1:1"
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- zookeeper
redis:
image: redis
ports:
- "6379"
restart: always
kafka-websocket-connector:
build: ./kafka-websocket-connector
image: <user>/kafka-websocket-connector
ports:
- "8077:8077"
depends_on:
- kafka
- redis
- zookeeper
links:
- "kafka"
- "redis"
Run Code Online (Sandbox Code Playgroud)
Dockerfile所引用的内容kafka-websocket-connector如下:
Dockerfile
FROM …Run Code Online (Sandbox Code Playgroud) 我想知道如何格式化文本并使日期时间字符串的某些部分变为粗体?
例如,我想制作我当前的日期时间格式,如下所示:02/19/2018 16:00 CST到02/19/2018 16:00 CST.
这是生成当前日期时间格式的代码.
<td{{ visit['end_dte'] | date:'MM/dd/yyyy HH:mm Z'}}</td>
我尝试过这样做,<td{{ visit['end_dte'] | date:'MM/dd/yyyy <b>HH:mm Z</b>'}}</td>但它使得管道被表示为文本而不是加粗时间.
apache-kafka ×2
docker ×2
spring-boot ×2
angularjs ×1
date-pipe ×1
datetime ×1
spring-kafka ×1