小编Yog*_*oth的帖子

Gitlab-CI 中的上游触发(又名管道依赖项)

我似乎无法从这样的工具中找到最明显的 CI 功能:在另一个项目的管道完成后运行项目管道。您可以这样做,trigger但仅限于下游触发,这与您想要的相反,如果您的项目是 20 个其他项目的核心依赖项,而这些项目都需要重建。

在这种情况下,您需要能够定义如下内容:

项目A:没什么特别的,只是一个普通的管道

项目 B,“依赖于”项目 A:

.gitlab-ci.yml

from_upstream:
  stage: pre
  trigger:
    project: ProjectA
Run Code Online (Sandbox Code Playgroud)

它的作用是每当 ProjectA 管道[成功]完成时触发 ProjectB 构建。

相反,您必须以类似的方式声明 ProjectA 中的所有数十个下游,这是愚蠢且适得其反的,特别是当 ProjectA 是一个在各处不断重用的核心库时。

那么,有人可以解释一下为什么 GitlabCI 缺少一个在 Bamboo 和 Hudson/Jenkins 中已有数十年的明显功能(即使在 EE 中也不可用)吗?我如何使用 Gitlab-CI 做我需要的事情?

更新:似乎上游/下游的概念对某些人来说确实令人困惑,所以只是澄清一下:上游 项目 A是而且必须始终与下游 项目 B分离,因为关注点分离是一件事,上游维护者不能也不应该可能不了解他们的项目如何在下游使用。

因此,所需的功能(同样,在 Bamboo 和 Jenkins 中存在了数十年)是下游管道在上游管道上声明被动触发器,而不是像目前在 Gitlab-CI 中实现的那样使用主动触发器。

gitlab gitlab-ci

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

有关实体层次结构的JPA2标准查询

假设我具有以下实体域:

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE")
public abstract class Entity1 {
//some attributes
}

@Entity 
@DiscriminatorValue("T1")
public class Entity2 extends Entity1 {
    @OneToMany(fetch=FetchType.EAGER, cascade = { CascadeType.ALL }, mappedBy="parent")
    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private Set<Entity1Detail> details = new HashSet<Entity1Detail>();
}

@Entity
public class Entity1Detail {
    @ManyToOne
    @JoinColumn(name="REF")
    private Entity2 parent;

    @Basic
    private Integer quantity;
}

@Entity
@DiscriminatorValue("T2")
public class Entity3 extends Entity1 {
//some other attributes
}
Run Code Online (Sandbox Code Playgroud)

当我执行JPQL查询时:

select e from Entity1 e left join e.details d where d.quantity > 1
Run Code Online (Sandbox Code Playgroud)

它运行良好(左联接; P)。但是,当我尝试使用JPA2标准API构建相同的查询时:

CriteriaBuilder builder …
Run Code Online (Sandbox Code Playgroud)

jpa-2.0

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

在 Kafka 和动态主题中关联

我正在使用 Kafka 构建相关系统。假设有一个服务A执行数据处理,并且有数千个客户端B向它提交作业。B是短暂的,它们出现在网络上,将数据推送到A,然后发生两件重要的事情:

  1. B将立即收到A的状态;
  2. 然后B要么完全退出,保持在线以接收有关状态的进一步更新,要么偶尔会重新打开以检查状态。

(这与网格计算或 mpi 没有什么不同)。

这两点都应该使用一个众所周知的概念来实现correlationIdB拥有一个唯一的 id(在我的例子中是 UUID),它在标头中发送给A,而A又使用它作为Reply-To主题来发送状态更新。这意味着它必须即时创建主题,它们无法预先确定。

我已经auto.create.topics.enable打开了,它确实动态地创建了主题,但是现有的消费者不知道它们并且需要重新启动 [我想是为了获取主题元数据,如果我理解文档正确的话]。我还检查了消费者的metadata.max.age.ms设置,但它似乎没有帮助,即使我将其设置为非常低的值。

据我所知,这还没有得到解答,即:kafka 过滤/动态主题创建kafka 消费者动态检测添加的主题Kafka 生产者可以创建主题和分区吗?或回答不满意。

由于有数百个A和数千个B,我不可能使用共享主题或类似的东西,以免我的网络过载。我可以使用 Kafka'sAdminTools或任何它的名字来预先创建主题,但我觉得它有点傻(即使我看到人们使用它与 Zookeeper 和 Kafka 基础设施本身交谈的现实生活中的例子)。

所以问题是,有没有一种方法可以动态创建 Kafka 主题,让消费者和生产者都知道它而无需重新启动或其他任何事情?而且,在最坏的情况下,AdminTools 真的会帮助它吗?我必须在哪一边使用它 - A还是B

Kafka 0.11, Java 8

更新AdminClient无论出于何种原因, 创建主题都无济于事,LEADER_NOT_AVAILABLE …

apache-kafka kafka-consumer-api

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