假设我想利用Camel作为RESTful Web服务的客户端。但不确定Camel是否适合这种工作。我也想使用http4或ahc组件,而不是cxf。
一般来说,我只需要两种路线:
ahc:http://host/api/user/create
ahc:http://host/api/user/id/1
我想有一个服务类以这样的方式触发这样的路由:
UserService {
@Autowired
protected CamelContext restApiCamelContext;
public UserCreateResponse createUser (UserModel user) {
... Camel's magick which starts create user route ...
}
public UserModel getUserById (Long id) {
... the id must be placed somehow into endpoint uri: http://host:port/api/user/id/${id} ...
... Camel's magick which get user by id ...
}
}
UserService应该在Spring MVC控制器中使用。
那么,是否可以基于Camel的功能实现这样的UserService?如果是,那么它会在大量用户请求弹簧控制器的高压下工作吗?近百种不同的uris能否正常使用?
答案 0 :(得分:0)
您可以通过动态设置CamelHttpUri的邮件头来更改请求uri。 如果您的业务逻辑很简单,我认为您可以创建一个简单的驼峰路线来完成这项工作。 然后使用camel ProducerTemplate将请求发送到camel路由。
答案 1 :(得分:0)
CAMEL方法与()&的区别recipientList()是to-method无法解析camel的动态参数,其中receiveList-method可以。
from("restlet:/your/some/address/{sourceId}?restletMethods=GET")
.log("execute '${header.sourceId}' for something").to("log:WebRequestThroughput?groupSize=10")
.beanRef("yourServiceBeanRef", "serviceMethodName")
.marshal().json(JsonLibrary.Jackson)
.to("http://domain/address/?bridgeEndpoint=true&throwExceptionOnFailure=true")
.unmarshal().json(JsonLibrary.Jackson, YourResponseObject.class)
.beanRef("anotherServiceBeanRef", "anotherMethodName");
from("restlet:/your/address/{sourceId}?restletMethods=GET")
.log("execute '${header.sourceId}' for something").to("log:WebRequestThroughput?groupSize=10")
.beanRef("yourServiceBeanRef", "serviceMethodName")
.marshal().json(JsonLibrary.Jackson)
.setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.POST))
.recipientList(simple("http://domain/address/${header.sourceId}?bridgeEndpoint=true&throwExceptionOnFailure=true"))
.unmarshal().json(JsonLibrary.Jackson, YourResponseObject.class)
.beanRef("anotherServiceBeanRef", "anotherMethodName");