[英]jersey rest web Service with Activemq middleware integration
我有一个用 JAX-RS 和 jersey 开发的 Restful 服务 API。 我已经在 TOMCAT 7 中部署了相同的内容。现在我想实现 Activemq,以便我将所有请求保留在队列中并处理请求资源。 如何做到这一点并与 tomcat7 集成。 如何将 ActiveMq 与 Tomcat7 或我的休息服务 webapp 集成。 如何调用服务。
重要提示:- 在 Rest Api 中,出于安全考虑,我使用 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);
}
}
}
}
这是我的 activemq 示例类:-
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。
在第一堂课中,我只是编写“chain.doFilter(request, response)”来将所有 http 请求转发到相应的资源。 现在怎么办。 在哪里放置 HTTP 请求。 我需要异步处理每个请求。 REST 是同步的。
请提出一些方法。 并解释你的答案。
感谢/问候 Kumar Shorav
您是否在 Apache ActiveMQ 上看过 REST 文档: http : //activemq.apache.org/rest.html
您是在谈论将 ActiveMQ 作为代理嵌入到 Tomcat 中,还是在单独的盒子/jvm 中运行 ActiveMQ 代理?
由于独立的 ActiveMQ 具有开箱即用的 REST API,如上面该链接中所述。
请参考: http : //java.dzone.com/articles/jms-activemq
它可以解决您的问题,只需使一个功能发送消息,并将其合并到您不会使用的过程中即可。
由于缺少凭据,您在点击 rest URL 时看到 ActiveMQ 管理控制台的原因,请使用基本身份验证传递凭据。 我写了一个 groovy 客户端来调用 rest URL。 你可以使用类似的东西......
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.