Trikot Rest Web Service mit Activemq Middleware-Integration
Ich habe eine Restful-Service-API, die mit JAX-RS und Jersey entwickelt wurde. Ich habe dasselbe in TOMCAT 7 implementiert. Jetzt möchte ich Activemq implementieren, damit alle Anforderungen in einer Warteschlange bleiben und die Anforderungsressource verarbeitet werden. Vorgehensweise und Integration in tomcat7 So integrieren Sie ActiveMq in Tomcat7 oder meine Webanwendung für den Restdienst. So rufen Sie den Service auf.
Wichtig: - In der Rest-API verwende ich das FilterChaining-Konzept aus Sicherheitsgründen und leite die Anforderung nach Überprüfung durch den anrufenden Teilnehmer einfach an die Ressource weiter. Hierzu habe ich in der web.xml hinzugefügt.
Vielen Dank
Hier ist meine Klasse: -
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);
}
}
}
}
Hier ist meine Beispielklasse für 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());
}
}
}
Wenn nun eine Anfrage in der Klasse "Limit Filter" eingeht, leite ich nach einer gewissen mecanisam-Authentifizierung direkt an die Ressourcen weiter. Deshalb verwende ich Filterkonzept, um alle Anfrage zu fangen.
Zweite Klasse ist Beispielklasse, wenn ich laufe; Nachrichten werden abgerufen und gelöscht; Ich kann in der Konsole für ActiveMq sehen.
In der ersten Klasse schreibe ich einfach"chain.doFilter (Anfrage, Antwort)" um alle http-Anfragen an die jeweilige Ressource weiterzuleiten. Jetzt wie hier zu tun. Wo soll die HTTP-Anforderung abgelegt werden? Ich muss jede Anfrage asynchron bearbeiten. REST ist synchron.
Bitte schlagen Sie einen Weg vor. und erkläre deine Antwort.
Danke / Grüße Kumar Shorav