我有一个使用JAX-RS和jersey开发的Restful服务API。我已经在TOMCAT 7中部署了相同的组件。现在,我想实现Activemq,以便将所有请求都保留在队列中并处理请求资源。如何做到这一点并与tomcat7集成。如何将ActiveMq与Tomcat7或我的REST Service Webapp集成。如何调用服务。

重要事项:-
在Rest Api内部,出于安全性考虑,我使用FilterChaining概念,并且在对主叫方进行验证之后,我只是将请求转发到资源。为此,我添加了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, 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。

07-27 13:59
查看更多