出于学习目的,我正在尝试将此 Java 命令模式示例迁移到 PHP:
https://codereview.stackexchange.com/questions/52110/command-pattern-implementation
正如@simon 所评论的那样,使用方法引用运算符,可以使代码现代化很多:
class MyCommand implements Order {
private final Runnable action;
public MyCommand(Runnable action) {
this.action = action;
}
@Override
public void execute() {
action.run();
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以创建这样的命令:
MyCommand bsc = new MyCommand(stock::buy);
MyCommand ssc = new MyCommand(stock::sell);
Run Code Online (Sandbox Code Playgroud)
我当前的 PHP 实现在这里:https : //3v4l.org/iIHn9
那么在 PHP 中实现MyCommand 类的最佳方法是什么?
实现使用参考数据丰富存储在Kafka中的传入事件流的用例的简单方法是通过在map()运算符中调用为每个传入事件提供此参考数据的外部服务REST API.
eventStream.map((key, event) -> /* query the external service here, then return the enriched event */)
Run Code Online (Sandbox Code Playgroud)
另一种方法是将第二个事件流与参考数据一起存储,KTable然后将其存储在一个轻量级嵌入式"数据库"中,然后将主事件流与其连接.
KStream<String, Object> eventStream = builder.stream(..., "event-topic");
KTable<String, Object> referenceDataTable = builder.table(..., "reference-data-topic");
KTable<String, Object> enrichedEventStream = eventStream
.leftJoin(referenceDataTable , (event, referenceData) -> /* return the enriched event */)
.map((key, enrichedEvent) -> new KeyValue<>(/* new key */, enrichedEvent)
.to("enriched-event-topic", ...);
Run Code Online (Sandbox Code Playgroud)
"天真"的方法可以被视为反模式吗?可以KTable推荐" "方法作为首选方法吗?
Kafka每分钟可以轻松管理数百万条消息.从map()操作员调用的服务也应该能够处理高负载并且也具有高可用性.这些是服务实现的额外要求.但是,如果服务满足这些标准,可以采用"天真"的方法吗?
使用spring-kafka 2.1.x在Spring Boot 2.0应用程序中实现死信队列(DLQ)概念的最佳方法是,将某个bean 的@KafkaListener方法无法处理的所有消息发送到某个预定义的Kafka DLQ主题不会丢失一条消息?
因此,消耗的卡夫卡记录是:
我尝试使用ErrorHandler的自定义实现创建侦听器容器,从而无法使用KafkaTemplate将记录处理为DLQ主题。使用禁用的自动提交和RECORD AckMode。
spring.kafka.enable-auto-ack=false
spring.kafka.listener.ack-mode=RECORD
@Configuration
public class KafkaConfig {
@Bean
ConcurrentKafkaListenerContainerFactory<Integer, String> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<Integer, String> factory = ...
...
factory.getContainerProperties().setErrorHandler(dlqErrorHandler);
return factory;
}
}
@Component
public class DlqErrorHandler implements ErrorHandler {
@Autowired
private KafkaTemplate<Object, Object> kafkaTemplate;
@Value("${dlqTopic}")
private String dlqTopic;
@Override
public void handle(Exception thrownException, ConsumerRecord<?, ?> record) {
log.error("Error, sending to DLQ...");
kafkaTemplate.send(dlqTopic, record.key(), record.value());
}
}
Run Code Online (Sandbox Code Playgroud)
似乎此实现不能保证第3 …
spring-integration dead-letter apache-kafka spring-boot spring-kafka
如何对从 AWS Parameter Store 读取属性的 Spring Boot 应用程序执行集成测试(依赖项org.springframework.cloud:spring-cloud-starter-aws-parameter-store-config)。
是否应该在集成测试中禁用 AWS Parameter Store 集成?
如何在集成测试中使用本地服务器(或模拟)而不是真正的AWS Parameter Store?
spring amazon-web-services spring-boot spring-cloud aws-parameter-store
当我们需要更改两个系统中的数据时,双写入就会出现问题:数据库(SQL 或 NoSQL)和 Apache Kafka(例如)。必须可靠地/自动地更新数据库并发布消息。最终一致性是可以接受的,但不一致是不能接受的。
如果没有两阶段提交 (2PC),双写入会导致不一致。
但在大多数情况下,2PC 并不是一个选择。
事务发件箱是一种微服务架构模式,其中单独的消息中继进程将插入数据库的事件发布到消息代理。
并行运行的多个消息中继进程会导致发布重复项(2 个进程读取 OUTBOX 表中的相同记录)或无序(如果每个进程只读取 OUTBOX 表的一部分)。
单个消息中继进程也可能多次发布消息。消息中继可能会在处理 OUTBOX 记录之后但在记录它已完成此操作的事实之前崩溃。当消息中继重新启动时,它将再次发布相同的消息。
如何在事务发件箱模式中实现消息中继,以便将重复消息或无序的风险降至最低,并且该概念适用于所有 SQL 和 NoSQL 数据库?
2phase-commit distributed-transactions duplicates microservices outbox-pattern
我正在使用 ffmpeg 将图像缩放到特定点(x,y)。
我希望该点是缩放的最终位置。我现在使用的命令是:
ffmpeg -y -i zoomInimg.jpg -vf "scale=6198:2350:-1,zoompan=z='min(max(zoom,pzoom)+0.06,10)':d=2400:x=4000 :y=1000 :s=6198x2350" -t 5 zoomIn.mp4
Run Code Online (Sandbox Code Playgroud)
我想要一个将图像缩放到点(x=4000,y=1000)的视频。
Spring Boot (version 2.2) application with Spring Kafka (version 2.4) 无法与官方执行的Bitnami Docker Kafka (version 2)建立连接docker-compose.yml
version: '2'
services:
zookeeper:
image: 'bitnami/zookeeper:3'
ports:
- '2181:2181'
volumes:
- 'zookeeper_data:/bitnami'
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
kafka:
image: 'bitnami/kafka:2'
ports:
- '9092:9092'
volumes:
- 'kafka_data:/bitnami'
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
depends_on:
- zookeeper
volumes:
zookeeper_data:
driver: local
kafka_data:
driver: local
Run Code Online (Sandbox Code Playgroud)
Spring 应用程序不断产生以下警告:
[kafka-admin-client-thread | adminclient-1] WARN o.apache.kafka.clients.NetworkClient.initiateConnect - [AdminClient clientId=adminclient-1] Error connecting to node 2228a9a3b8c5:9092 (id: 1001 rack: null) java.net.UnknownHostException: 2228a9a3b8c5
Run Code Online (Sandbox Code Playgroud)
或者
[kafka-admin-client-thread | …Run Code Online (Sandbox Code Playgroud) apache-kafka ×3
spring-boot ×2
dead-letter ×1
docker ×1
duplicates ×1
ffmpeg ×1
java ×1
php ×1
porting ×1
runnable ×1
spring ×1
spring-cloud ×1
spring-kafka ×1