CamelContextStartedEvent对于相同的骆驼上下文 (camel-1) 被调用两次。问题可能是我注册的方式EventNotifier。您可以使用 Spring Boot 1.5.14、Spring Boot Camel Starter 2.21.1 和 Spring Boot Web Starter 来重现该问题。
查看日志:
2018-07-06 11:04:41.104 INFO 19092 --- [ main] o.a.camel.spring.SpringCamelContext : Apache Camel 2.21.1 (CamelContext: camel-1) is starting
2018-07-06 11:04:41.106 INFO 19092 --- [ main] o.a.c.m.ManagedManagementStrategy : JMX is enabled
2018-07-06 11:04:41.191 INFO 19092 --- [ main] o.a.camel.spring.SpringCamelContext : StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
2018-07-06 11:04:41.193 INFO …Run Code Online (Sandbox Code Playgroud) 如果camel DSL被标记为transacted(),那么我们真的需要在Spring服务方法中添加@Transactional注解吗?
我真的很想知道Camel和Spring Transaction交互的进出。
任何帮助将不胜感激。
我有以下路线。奇怪的是,自定义标头值“myHeader”在 Kafka 的消费者端丢失了。
您能否让我知道这是什么原因以及如何解决这个问题。
from("file://inputFolder?delay=2s&noop=true")
.convertBodyTo(String.class)
.setHeader("myHeader", constant("MY_HEADER_VALUE"))
.to("kafka:test-topic?brokers=localhost:9092");
from("kafka:test-topic?brokers=localhost:9092")
.log("${body}")
.log("***** myHeader: ${header.myHeader}")
Run Code Online (Sandbox Code Playgroud)
myHeader 的值是一个空字符串,尽管我将其设置为“”MY_HEADER_VALUE”。
我们使用 Apache Camel 2.20.2 和 Spring Boot 版本 1.5.10.RELEASE。
Map<String, String>有没有办法让camel使用包含请求参数 的端点创建uri ?
我经常遇到这样的情况,我通过配置获得不同的参数,并且必须在运行时以编程方式构建 uri(之后是静态的)。
目前我总是必须自己构建 uri,这可以找到,但我想知道是否有更干净的方法。
例如,这就是我使用某些配置构建 smtp enpoint 的 uri 的方法(可能不是最简单的代码,但它工作正常):
private String buildSmtpUri() {
StringBuilder sb = new StringBuilder();
if (configuration.isEnableSslSecurity()) {
sb.append("smtps://");
} else {
sb.append("smtp://");
}
Assert.hasText(configuration.getSmtpUrl(), "No smtp url was given");
sb.append(configuration.getSmtpUrl());
if (configuration.getPort() != null) {
sb.append(":");
sb.append(configuration.getPort());
}
Map<String, String> parameters = new HashMap<>();
if (StringUtils.isNotEmpty(configuration.getUsername())) {
parameters.put("username", configuration.getUsername());
}
if (StringUtils.isNotEmpty(configuration.getPassword())) {
parameters.put("password", configuration.getPassword());
}
if (configuration.isBodyIsHtml()) {
parameters.put("contentType", "text/html");
}
AtomicBoolean first = new AtomicBoolean(true);
parameters.forEach((key, value) -> …Run Code Online (Sandbox Code Playgroud) 看似简单,但我不能让它工作.我想要做的是获取放置在"from"路径中的任何文件,修改其内容,并将修改后的文件放在"to"路径中(扩展名为.txt).这就是我所拥有的:
this.context.addRoutes(new RouteBuilder() {
public void configure() {
from( "file:" + getFromPath() + getOptions() )
.to( "file:" + getToPath() + "?fileName=${file:name.noext}.txt")
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
String name = (String) exchange.getIn().getHeader("CamelFileName");
File body = exchange.getIn().getBody(File.class);
String parsedText = modifyFile(body);
exchange.getOut().setBody(parsedText);
}
})
;}
});
Run Code Online (Sandbox Code Playgroud)
输出文件正在创建,但内容与输入文件完全相同.即,文件未被修改.我确认"modifyFile"方法正在返回我想要的内容,但无法将它们写入输出("to")路径.
谢谢您的帮助!
我有以下路线:
<!-- RC get projects -->
<route id="sqlRCprojects">
<setBody>
<constant>SELECT [No_] FROM [navview].[dbo].[job] WHERE [Project Director] = 'RC';</constant>
</setBody>
<to uri="jdbc:sql2005navview?readSize=0"/>
<split>
<tokenize token=","/>
<setHeader headerName="project">
<javaScript>request.body.substring(6, (""+request.body).length-1)</javaScript>
</setHeader>
<to uri="activemq:queue:test.line"/>
</split>
<to uri="mock:result"/>
</route>
Run Code Online (Sandbox Code Playgroud)
它使用这个bean:
<bean id="sql2005navview" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://**.**:56395;databaseName=test" />
<property name="username" value="**" />
<property name="password" value="**" />
Run Code Online (Sandbox Code Playgroud)
这失败并显示以下消息:
INFO | Apache Camel 2.7.0 (CamelContext: camel) is shutdown in 0.009 seconds
ERROR | Context initialization failed
org.apache.camel.RuntimeCamelException: java.util.NoSuchElementException
at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1139)
at org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:103)
at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:238) …Run Code Online (Sandbox Code Playgroud) 我的应用程序需要作为中间件(MW)工作,它从各个客户获得订单(以XML的形式),其中包含--------------优先级1供应商ID,其中客户可以发送XML到这些组件之一
1)JMS queue
2)File system
3)HTTP
4)Web service request(rest/soap)
Run Code Online (Sandbox Code Playgroud)
该MW将首先验证传入请求并将确认发送给通过其首选信道请求订单的客户.传入的XML中存在通道和客户端点信息.
一旦获得订单,它需要通过xml形式的优先通道向不同的供应商发送订单请求.我的数据库中有供应商及其首选渠道信息.
所以它是企业集成的用例.
我计划使用核心Java技术来做到这一点.这是我计划的方法.
将为每种类型的传入请求(JMS队列,文件系统,HTTP,Web服务请求(休息/肥皂))提供四个侦听器/条目端点.这些监听器将把xml字符串放在jms队列中.这将作为接待员工作,并使过程异步.
现在我将拥有将在队列中监听的jms使用者.(消费者可以在同一系统上或根据生产者机器上的负载而与生产者不同).此使用者将xml字符串解析为java对象.执行验证.将确认发送给客户(确认需要根据客户的喜好发送.我将使用确认处理器工厂,它将根据喜好发送确认).验证完成后,将此pojo转换为另一种pojo格式,以便xstream/jaxb进一步将其编组为xml格式,并在其首选通道上发送给供应商(供应商首选项存储在db中),如通过soap,jms,文件请求等.
有些我遇到过这个CAMEL链接http://java.dzone.com/articles/open-source-integration-apache,看起来它提供了完美的解决方案,发现这是企业集成的用例.
专家请建议Camel为此提供正确的解决方案.或者像Spring集成的其他一些企业集成框架,ESB在这种情况下会更加有用.如果有人能指出ESB解决这种用例的资源.这真的很有帮助.
由于时间限制,我无法探索所有解决方案,因此寻找专家建议,以便集中精力于一个.
java esb apache-camel spring-integration enterprise-integration
我们的应用程序是包含多个Web应用程序的企业应用 每个Web应用程序都包含一个或多个驼峰上下文.最近,我们正在探索使用HawtIO进行监控和管理的选项.我们使用骆驼(保险丝)版本 - 2.12.0.redhat-610379与Wildfly 8.1(Dev env -prod为WAS8.5).我尝试过HawtIO网络应用程序版本,范围从1.4.10到14,并且还有no-slf4j版本.但HawtIO仅显示最多3个camelcontext.我也尝试过给adminNamePattern,但仍然没有积极的结果.如果我评论出一些列出的驼峰上下文,那么其他人将被列出.请注意,每个驼峰上下文将包含大约10到15个路由,端点(spring bean)将大约30个.但我能够在org.apache.camel下的JMX Dashboard中找到未列出的驼峰上下文.请告诉我任何解决方法,或者我在配置中遗漏了什么.我的骆驼语境将引用多个路线上下文.
我正在学习如何使用Camel.我遇到以下代码片段的问题:
@SpringBootApplication
public class FeefooExampleApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(FeefooExampleApplication.class, args);
CamelContext camelContext = new DefaultCamelContext();
camelContext.addRoutes(new CamelConfig());
camelContext.start();
Blah blah = new Blah();
blah.getFeefoData();
}
}
Run Code Online (Sandbox Code Playgroud)
我的CamelConfig类如下:
package com.example.camel;
import com.example.feefo.FeedbackProcessor;
import org.apache.camel.builder.RouteBuilder;
public class CamelConfig extends RouteBuilder {
private FeedbackProcessor feedbackProcessor = new FeedbackProcessor();
@Override
public void configure() throws Exception {
from("jetty:http://cdn2.feefo.com/api/xmlfeedback?merchantidentifier=example-retail-merchant")
.convertBodyTo(String.class)
.bean(feedbackProcessor, "processFeedback") ;
}
}
Run Code Online (Sandbox Code Playgroud)
报告的错误如下:'线程中的异常"main"java.net.BindException:无法分配请求的地址'
有人能帮忙吗?
谢谢
我是Apache Camel的新手,想知道是否有类似于JBoss Fuse的开源可视化编辑器.请分享你们用于视觉编辑或Apache Camel的简单可视化的内容.非常感谢!
apache-camel ×10
java ×3
apache ×2
spring ×2
spring-camel ×2
apache-kafka ×1
esb ×1
file ×1
hawtio ×1
ide ×1
routes ×1
spring-boot ×1