Camel添加路由过程

Camel添加路由一般情况下是调用CamelContext的addRoutes(RoutesBuilder builder)方法实现的,下面我们看看该方法是如何实现路由的添加的:

public void addRoutes(RoutesBuilder builder) throws Exception {
	//调用RouteBuilder的addRoutesToCamelContext方法,并将CamelContext作为参数传递进去
    builder.addRoutesToCamelContext(this);
}

下面是addRoutesToCamelContext方法源码:

public void addRoutesToCamelContext(CamelContext context) throws Exception {
    configureRoutes((ModelCamelContext)context);
    populateRoutes();
}

这里调用了两个方法,我们先看configureRoutes方法,该方法的工作是配置路由:

public RoutesDefinition configureRoutes(ModelCamelContext context) throws Exception {
    setContext(context);
    checkInitialized();
    routeCollection.setCamelContext(context);
    return routeCollection;
}

这其中最重要的是checkInitialized方法,其它的都很简单,下面就看看checkInitialized方法:

protected void checkInitialized() throws Exception {
    if (initialized.compareAndSet(false, true)) {
        ModelCamelContext camelContext = getContext();
        if (camelContext.getErrorHandlerBuilder() != null) {
            setErrorHandlerBuilder(camelContext.getErrorHandlerBuilder());
        }
        configure();
        for (RouteDefinition route : getRouteCollection().getRoutes()) {
            route.markPrepared();
        }
    }
}

该方法首先在检查有没有初始化过,如果是第一次执行,肯定是没有进行初始化的,如果会执行configure()方法,而这个方法就是我们在创建RouteBuilder对象时要实现的方法,在该方法中完成了RouteDefinition的配置与创建。configure()方法执行完成后遍历所有路由标记已预处理过了。

下面我们去看看populateRoutes()方法,该方法中就是真正将路由定义添加到CamelContext中的操作:

protected void populateRoutes() throws Exception {
    ModelCamelContext camelContext = getContext();
    if (camelContext == null) {
        throw new IllegalArgumentException("CamelContext has not been injected!");
    }
    getRouteCollection().setCamelContext(camelContext);
    //将所有路由定义取出,并且添加到CamelContext中
    camelContext.addRouteDefinitions(getRouteCollection().getRoutes());
}

下面是CamelContext的addRouteDefinitions源码:

public synchronized void addRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception {
    //遍历所有路由定义
    for (RouteDefinition routeDefinition : routeDefinitions) {
    	//如果路由定义已经存在则移除原有定义
        removeRouteDefinition(routeDefinition);
    }
    //将所有路由定义添加到路由定义集合中
    this.routeDefinitions.addAll(routeDefinitions);
    //判断是否要启动路由
    if (shouldStartRoutes()) {
        startRouteDefinitions(routeDefinitions);
    }
}

在shouldStartRoutes方法中,如果CamelContext已启动并且不是在启动过程中则返回true,所以在CamelContext启动之后再添加新的路由定义该路由定义是会自动启动的。

添加路由与跌幅的配置创建就讲完了,下面就是最重要的:路由定义的执行过程,即路由定义的启动过程,这个下回讲解......

时间: 2024-08-01 22:47:32

Camel添加路由过程的相关文章

MFC命令消息路由过程(视图、框架、应用)

一.环境 IDE:VC6.0 OS:WindowsXp 二.编写测试代码和环境配置 新建一个Win32 Application 选择 "A Simple Win32 Application" 打开stdafx.h头文件把 #include <windows.h> 更改为: #include <afxwin.h> 修改工程设置使用MFC静态库以便能够查看微软提供的MFC源代码 Project->Settings->MicrosoftFoundation

linux 添加路由

查看路由 route -n 2.添加路由 route add -net 192.168.30.0/24 dev eth0  基于网卡添加 route add -net 192.168.40.0/24 gw 192.168.50.1 基于网关添加 route add -host 192.168.40.2 gw 192.168.50.1  基于主机添加 3.删除路由 route del -net 192.168.30.0/24 dev eth0 route del 192.168.40.2 gw 1

#[Composer学习笔记]Part2:添加路由

在Part1的基础上,为项目添加路由: 增加路由扩展:这里选择macaw,在composer中的扩展包为: codingbean/macaw 编辑composer.json文件: {   "require": {     "codingbean/macaw": "dev-master"     } } 保存,并执行: composer.phar update 这时,vendor下就多了 codingbean 文件夹 编辑路由规则 创建config

Linux主机添加路由 route

近期小乱我使用ansible批量部署设备接入到日志审计系统时,发现执行脚本后,日志服务器端仍未收到Linux主机上传的syslog:排查后发现故障原因是主机的路由未放通. 在主机上添加路由,指令比较简单: 1.添加/删除 默认网关: 添加:route add default gw Gateway_IP删除:route del default gw Gateway_I 2.添加/删除 普通路由: 单个IP: 添加:route add -host 192.168.1.1 gw Gateway_IP

Angular 添加路由

var app=angular.module('kaifanla',['ng','ngRoute']);app.config(function($routeProvider){ //添加路由 $routeProvider .when('/文件名',{ templateUrl:'tpl/start.html', controller:'startCtrl' }) .when('/文件名',{ templateUrl:'tpl/main.html', controller:'mainCtrl' })

MVC之URL路由过程及原理(待续)

注册路由规则集合 一个 Web 应用具有一个全局的路由表,该路由表通过 System. Web.Routing.RouteTable的静态只读属性 Routes 表示,该属性返回一个类型为 System. Web.Routing.RouteCollection集合 Global.asax是程序的入口,在添加的 Globa l. asax 文件中,我们将路由注册操作定义在 App lication_ Start 方法. protected void Application_Start() { //

IP欺骗:要虚拟很多IP的情况:在一台机上虚拟的IP跨网段的处理,可通过在服务器端添加路由来实现

要虚拟很多IP的情况:在一台机上虚拟的IP跨网段的处理,可通过在服务器端添加路由来实现. 例: [服务器] IP:192.168.0.1 [测试机] IP:192.168.0.2 测试机上添加的虚拟 IP:192.168.10.1~254 那么在[服务器]端执行以下命令: route add 192.168.10.0 mask 255.255.255.0 192.168.0.2 注:[格式: route add 虚拟IP 网段号 mask 255.255.255.0 测试]

实施现场实用 添加路由

在实际运用中,我们经常会遇到笔记本要同时访问外网和局域网的情况.一般情况下是笔记本连WiFi,然后接一根网线连到局域网交换机(前提),这时我们会遇到的问题是笔记本连了WiFi之后就不能访问局域网了,禁用WiFi则可以访问局域网,要实现同时访问外网和局域网,我们可以给笔记本增加路由操作,具体操作如下: 常规用例语句: 添加路由:route -p add 10.10.10.0 mask 255.255.255.0 172.20.153.254 打印路由:route peint 10.* 删除路由:r

动态添加路由addRoutes

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con