Jersey rest web Service с интеграцией промежуточного ПО Activemq

У меня есть API-интерфейс Restful, разработанный с помощью JAX-RS и трикотажа. Я развернул то же самое в 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());
        }

    }

}

Теперь, если какой-либо запрос входит в класс Limit Filter, я пересылаю его непосредственно ресурсам после некоторой проверки подлинности mecanisam. Вот почему я использую концепцию фильтра для поиска всех запросов.

Второй класс - это пример класса, когда я запускаю; обмен сообщениями возникает и деактивируется; Я вижу консоль для ActiveMq.

В первом классе я просто пишу "chain.doFilter(request, response)" , чтобы переслать весь HTTP-запрос на соответствующий ресурс. Теперь как это сделать. Куда поместить запрос HTTP. Мне нужно обрабатывать каждый запрос асинхронно. REST является синхронным.

Пожалуйста, предложите какой-то способ. и объясните свой ответ.

Спасибо/С наилучшими пожеланиями Кумар Шорав

Ответ 1

Вы видели документацию REST в Apache ActiveMQ: http://activemq.apache.org/rest.html

Также вы говорите о внедрении ActiveMQ в качестве брокера внутри Tomcat, или вы запускаете брокера ActiveMQ в отдельном поле /jvm?

Поскольку автономный ActiveMQ имеет REST API из коробки, как указано в этой ссылке выше.

Ответ 2

см. http://java.dzone.com/articles/jms-activemq

его решить вашу проблему, просто сделать одну функцию для отправки сообщения и включить это в процесс, где вы не будете.

Ответ 3

Причина, по которой вы видите консоль администратора ActiveMQ при попадании URL-адреса остатка из-за отсутствия учетных данных, пропустите учетные данные, используя базовую аутентификацию. Я написал клиенту 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();