Java jersey rest web服务与Activemq中间件集成
我有一个用JAX-RS和jersey开发的Restful服务API。我已经在Tomcat7中部署了相同的功能。现在我想实现Activemq,以便将所有请求保留在队列中并处理请求资源。如何做到这一点并与tomcat7集成。如何将ActiveMq与Tomcat7或我的rest服务webapp集成。如何呼叫服务 重要事项:- 在RESTAPI内部,出于安全考虑,我使用FilterChaining概念,在验证调用方之后,我只是将请求转发给资源。为此,我在web.xml中添加了 谢谢 这是我的班级:-Java jersey rest web服务与Activemq中间件集成,java,rest,jms,jax-rs,activemq,Java,Rest,Jms,Jax Rs,Activemq,我有一个用JAX-RS和jersey开发的Restful服务API。我已经在Tomcat7中部署了相同的功能。现在我想实现Activemq,以便将所有请求保留在队列中并处理请求资源。如何做到这一点并与tomcat7集成。如何将ActiveMq与Tomcat7或我的rest服务webapp集成。如何呼叫服务 重要事项:- 在RESTAPI内部,出于安全考虑,我使用FilterChaining概念,在验证调用方之后,我只是将请求转发给资源。为此,我在web.xml中添加了 谢谢 这是我的班级:-
public class LimitFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//some authentication
if (true) {
// let the request through and process as usual
chain.doFilter(request, response);
} else {
// handle limit case, e.g. return status code 429 (Too Many
// Requests)
// see http://tools.ietf.org/html/rfc6585#page-3
((HttpServletResponse) response).sendError(429);
}
}
}
}
public class Qservlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String body = "";
try {
// Create a ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("admin", "admin", ActiveMQConnection.DEFAULT_BROKER_URL);
// Create a Connection
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("testQ");
TextMessage message = session.createTextMessage();
message.setText( "My text message was send and received");//
message.setJMSRedelivered(true);
message.setJMSCorrelationID(request.getSession().getId());
connection.start();
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
producer.send(message);
message = null;
MessageConsumer consumer = session.createConsumer(destination);
message = (TextMessage) consumer.receive(1000);
if (message != null) {
body = message.getText();
}
producer.close();
consumer.close();
session.close();
connection.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
这是我的activemq示例类:-
public class LimitFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//some authentication
if (true) {
// let the request through and process as usual
chain.doFilter(request, response);
} else {
// handle limit case, e.g. return status code 429 (Too Many
// Requests)
// see http://tools.ietf.org/html/rfc6585#page-3
((HttpServletResponse) response).sendError(429);
}
}
}
}
public class Qservlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String body = "";
try {
// Create a ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("admin", "admin", ActiveMQConnection.DEFAULT_BROKER_URL);
// Create a Connection
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("testQ");
TextMessage message = session.createTextMessage();
message.setText( "My text message was send and received");//
message.setJMSRedelivered(true);
message.setJMSCorrelationID(request.getSession().getId());
connection.start();
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
producer.send(message);
message = null;
MessageConsumer consumer = session.createConsumer(destination);
message = (TextMessage) consumer.receive(1000);
if (message != null) {
body = message.getText();
}
producer.close();
consumer.close();
session.close();
connection.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
现在,如果有任何请求来自LimitFilter类,我将在一些身份验证mecanisam之后直接转发到资源。这就是为什么我使用过滤器概念来捕获所有请求
第二节课是我跑步时的示范课;消息传递是排队和退队;我可以在ActiveMq的控制台中看到
在第一个类中,我只需编写“chain.doFilter(request,response)”将所有http请求转发到相应的资源。现在在这里怎么办。将HTTP请求放在何处。我需要异步处理每个请求。REST是同步的
请提出一些建议。并解释你的答案
谢谢/问候
Kumar Shorav您看过Apache ActiveMQ上的REST文档了吗: 另外,您是在谈论将ActiveMQ作为代理嵌入Tomcat中,还是在单独的box/jvm中运行ActiveMQ代理
由于独立ActiveMQ具有现成的REST API,如上面的链接所述。由于缺少凭据,您在点击REST URL时看到ActiveMQ管理控制台的原因是,请使用基本身份验证传递凭据。我编写了一个groovy客户端来调用RESTURL。你可以用类似的
import groovyx.net.http.HTTPBuilder;
import groovyx.net.http.Method;
import groovyx.net.http.ContentType;
import groovyx.net.http.RESTClient;
import groovyx.net.http.HttpResponseDecorator;
import groovy.json.JsonSlurper;
def headers= ["Authorization": 'Basic' +'admin:admin'.bytes.encodeBase64().toString()];
println headers;
def restClient = new RESTClient('http://servername:8161');
def restClientResponse = restClient.get(path: '/api/message/queueName?type=queue',headers:headers,requestContentType: ContentType.JSON)
println restClientResponse.status;
println restClientResponse.headers['Content-Length'];
println restClientResponse.getData();
我已经看过这些文件了。然而,我无法从这一点开始。你有什么小例子吗?请告诉我。谢谢你的回答。我不知道,但我需要将所有传入的Http请求放入队列,然后转发到服务。请发表评论。这个问题出了什么问题?您是否对HttpServletRequest中的自定义对象感兴趣,或者您需要它,因为您想稍后将信息中继回客户端?@Phani是的,在Httpservlet请求中。