小编Evg*_*yst的帖子

如何使用 runnable 将 java 命令模式迁移到 PHP 7.4?

出于学习目的,我正在尝试将此 Java 命令模式示例迁移到 PHP:

https://codereview.stackexchange.com/questions/52110/command-pattern-implementation

UML图

正如@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 类的最佳方法是什么?

php java porting command-pattern runnable

7
推荐指数
1
解决办法
244
查看次数

Kafka Streams和RPC:在map()运算符中调用REST服务被认为是反模式?

实现使用参考数据丰富存储在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()操作员调用的服务也应该能够处理高负载并且也具有高可用性.这些是服务实现的额外要求.但是,如果服务满足这些标准,可以采用"天真"的方法吗?

apache-kafka apache-kafka-streams

6
推荐指数
2
解决办法
1933
查看次数

带有Kafka的Kafka的死信队列(DLQ)

使用spring-kafka 2.1.x在Spring Boot 2.0应用程序中实现死信队列(DLQ)概念的最佳方法是,将某个bean 的@KafkaListener方法无法处理的所有消息发送到某个预定义的Kafka DLQ主题不会丢失一条消息?

因此,消耗的卡夫卡记录是:

  1. 成功处理,
  2. 处理失败并发送到DLQ主题,
  3. 未能处理,未发送到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

5
推荐指数
1
解决办法
8596
查看次数

Spring Cloud 应用程序与 AWS Parameter Store 的集成测试

如何对从 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

4
推荐指数
1
解决办法
2369
查看次数

发件箱模式 - 对于任何 SQL 和 NoSQL DB 没有重复和无序的消息中继

当我们需要更改两个系统中的数据时,双写入就会出现问题:数据库(SQL 或 NoSQL)和 Apache Kafka(例如)。必须可靠地/自动地更新数据库并发布消息。最终一致性是可以接受的,但不一致是不能接受的。

如果没有两阶段提交 (2PC),双写入会导致不一致。

但在大多数情况下,2PC 并不是一个选择。

事务发件箱是一种微服务架构模式,其中单独的消息中继进程将插入数据库的事件发布到消息代理。

交易发件箱

并行运行的多个消息中继进程会导致发布重复项(2 个进程读取 OUTBOX 表中的相同记录)或无序(如果每个进程只读取 OUTBOX 表的一部分)。

单个消息中继进程也可能多次发布消息。消息中继可能会在处理 OUTBOX 记录之后但在记录它已完成此操作的事实之前崩溃。当消息中继重新启动时,它将再次发布相同的消息。

如何在事务发件箱模式中实现消息中继,以便将重复消息或无序的风险降至最低,并且该概念适用于所有 SQL 和 NoSQL 数据库?

2phase-commit distributed-transactions duplicates microservices outbox-pattern

4
推荐指数
1
解决办法
1805
查看次数

ffmpeg:将图像缩放到 XY 位置(缩放)

我正在使用 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)的视频。

ffmpeg video-processing

2
推荐指数
1
解决办法
1955
查看次数

从 Spring Boot 应用程序连接到本地 Bitnami Docker Kafka 时出错

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 docker

1
推荐指数
1
解决办法
1352
查看次数