平台服务与Activemq中间件集成服务
我有一个用JAX-RS和jersey开发的Restful服务API。 我已经在TOMCAT 7中部署了相同的部分。现在我想实现Activemq,以便将所有请求保留在队列中并处理请求资源。 如何做到这一点,并与tomcat7集成。 如何将ActiveMq与Tomcat7或我的rest服务webapp集成。 如何致电该服务。
重要说明: – 在Api里面,我使用FilterChaining的概念来保证安全性,在validation了主叫方之后,我只是把请求转发给资源。 为此,我已经添加到web.xml中。
谢谢
这是我的class级 –
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, eg 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()); } } }
现在,如果有任何请求在限制filter类中,我经过一些authenticationmecanisam直接转发到资源。 这就是为什么我使用filter的概念来捕捉所有的要求。
当我跑步时,第二课是示例课。 消息传递是包装和出队; 我可以在控制台中看到ActiveMq。
在第一个类中,我简单地写了“chain.doFilter(request,response)”将所有的http请求转发给相应的资源。 现在该怎么办。 何处放置HTTP请求。 我需要asynchronous处理每个请求。 REST是同步的。
请build议一些方法。 并解释你的答案。
谢谢/问候库马尔Shorav
你看过Apache ActiveMQ的REST文档: http : //activemq.apache.org/rest.html
你还在谈论如何在Tomcat中embeddedActiveMQ作为代理,还是在单独的box / jvm中运行ActiveMQ代理?
由于独立的ActiveMQ具有开箱即用的REST API,正如上面的链接所述。
请参阅: http : //java.dzone.com/articles/jms-activemq
它解决你的问题只是使发送消息的一个function,并纳入你在你通常处理。
您在查看ActiveMQpipe理控制台时由于缺less凭据而点击其余的URL的原因,请使用基本身份validation来传递凭据。 我写了一个groovy客户端来调用其余的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();