Jersey Rest Web Servicio con integración de middleware Activemq.
Tengo una API de servicio Restful desarrollada con JAX-RS y jersey. He implementado lo mismo en TOMCAT 7. Ahora me gustaría implementar Activemq para mantener todas las solicitudes en una cola y procesar el recurso de solicitud. Cómo hacer esto e integrarlo con tomcat7. Cómo integrar ActiveMq con Tomcat7 o mi aplicación web de servicio de descanso. Cómo llamar al servicio.
Importante: - Dentro de la API de Rest, estoy usando el concepto FilterChaining por motivos de seguridad y, después de verificar la parte que llama, simplemente estoy reenviando la solicitud al recurso. Para esto he añadido en web.xml.
Gracias
Aquí está mi clase: -
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);
}
}
}
}
Aquí está mi clase de muestra para 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());
}
}
}
Ahora, si hay alguna solicitud en la clase de filtro de límite, reenvío directamente a los recursos después de algún mecanismo de autenticación. Es por eso que estoy usando el concepto de filtro para capturar todas las solicitudes.
La segunda clase es una clase de ejemplo cuando estoy corriendo; la mensajería es enquing y encolado; Puedo ver en la consola para ActiveMq.
En la primera clase simplemente estoy escribiendo."chain.doFilter (solicitud, respuesta)" para reenviar toda solicitud http al recurso respectivo. Ahora como hacer aqui. Donde colocar la solicitud HTTP. Necesito manejar cada solicitud de forma asíncrona. REST es síncrono.
Por favor, sugiera alguna manera. y explica tu respuesta.
Gracias / Saludos Kumar Shorav