Camel-K在Kubernetes上的实践

原创
2020/06/02 00:00
阅读数 1K


Apache Camel K是从Apache Camel构建的轻量级集成框架,该框架本机运行在Kubernetes上,并且专门为无服务器和微服务架构而设计。

Camel K支持多种语言来编写集成。基于Operator模式,Camel-K在Kubernetes资源上执行操作。使集成更上一层楼。利用Apache Camel项目的优势,例如各种各样的组件和企业集成模式(EIP)。

安装CamelK Operator:

kamel install

编写第一个Camel K应用程序

我们将通过一个简单的Camel K入门应用程序重新开始。首先创建Basic.java文件:

Basic.java.

// camel-k: language=java

import org.apache.camel.builder.RouteBuilder;

public class Basic extends RouteBuilder {
@Override
public void configure() throws Exception {

from("timer:java?period=1000&fixedRate=true")
.setHeader("example")
.constant("java")
.setBody().simple("Hello World! Camel K route written in ${header.example}.")
.to("log:ingo");

}
}

不需要在文件夹中指定任何 dependency,Camel K会找出来并在构建过程中注入它。因此,您只需要编写应用程序即可。在这种情况下,Kamel二进制文件会将其推入集群,Operator将为您完成所有繁琐的步骤。

kamel run camel-basic/Basic.java --dev

查看Camel-K的pod:

查看pod日志,我们看到显示了Hello World!

接下来,我们展示如何使用外部属性和简单的基于内容的路由器来配置集成。创建Routing.java文件:

// camel-k: language=java

import java.util.Random;

import org.apache.camel.PropertyInject;
import org.apache.camel.builder.RouteBuilder;

public class Routing extends RouteBuilder {

private Random random = new Random();

@PropertyInject("priority-marker")
private String priorityMarker;


@Override
public void configure() throws Exception {



from("timer:java?period=3000")
.id("generator")
.bean(this, "generateRandomItem({{items}})")
.choice()
.when().simple("${body.startsWith('{{priority-marker}}')}")
.transform().body(String.class, item -> item.substring(priorityMarker.length()))
.to("direct:priorityQueue")
.otherwise()
.to("direct:standardQueue");

from("direct:standardQueue")
.id("standard")
.log("Standard item: ${body}");

from("direct:priorityQueue")
.id("priority")
.log("!!Priority item: ${body}");

}

public String generateRandomItem(String items) {
if (items == null || items.equals("")) {
return "[no items configured]";
}
String[] list = items.split("\\s");
return list[random.nextInt(list.length)];
}

}

Routing.java文件显示了如何通过属性占位符将属性注入到路由中,以及如何使用@PropertyInject批注。路由使用两个配置属性,分别称为item和priority-marker,应使用外部文件(例如routing.properties)提供这些属性。


创建路由外部配置文件:routing.properties。

# List of items for random generation
items=*radiator *engine door window *chair

# Marker to identify priority items
priority-marker=*

要运行集成,我们应该将集成链接到为其提供配置的属性文件:

kamel run camel-basic/Routing.java --property-file  camel-basic/routing.properties --dev

从下图我们可以看出,door属于Stand item:

现在,对属性文件进行一些更改,并查看重新部署的集成。例如,用* door更改单词door:

我们查看可以看到door变成了Priority item:


作为Kubernetes CronJobs运行集成

如果执行之间的延迟更改为可由cron选项卡表达式表示的值,则可以将上一步自动部署为Kubernetes CronJob。


例如,您可以将第一个endpoint(timer:java?period = 3000)更改为以下内容:timer:java?period = 60000(两次执行之间的1分钟)。

修改前:

修改后:


现在,再次运行集成:

kamel run camel-basic/Routing.java --property-file camel-basic/routing.properties


现在,您将看到Camel K实现了一项Cron工作(可能需要一分钟的时间才能显示出来):



CronJob行为是通过称为cron的特质控制的。特性是配置高级Camel K功能,自定义集成呈现方式的主要方法。

要禁用cron功能并使用部署策略,可以通过以下方式运行集成:

kamel run camel-basic/Routing.java --property-file camel-basic/routing.properties -t cron.enabled=false





本文分享自微信公众号 - 大魏分享(david-share)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部