Ich habe eine Restful-Service-API, die mit JAX-RS und Jersey entwickelt wurde. Ich habe dasselbe in TOMCAT 7 bereitgestellt. Jetzt möchte ich Activemq implementieren, damit ich alle Anfragen in einer Warteschlange halte und die Anfrageressource verarbeite. So machen Sie das und integrieren es in Tomcat7. So integrieren Sie ActiveMq in Tomcat7 oder meine Rest-Service-Webanwendung. So rufen Sie den Dienst an.
Wichtig:-
Innerhalb der Rest-API verwende ich aus Sicherheitsgründen das FilterChaining-Konzept und nach Überprüfung des Anrufers leite ich die Anfrage einfach an weiter die Ressource. Dafür habe ich 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 jetzt eine Anfrage in der Limit-Filter-Klasse eingeht, leite ich sie nach einigen Authentifizierungsmechanismen direkt an die Ressourcen weiter. Deshalb verwende ich das Filterkonzept, um alle Anfragen abzufangen.
Die zweite Klasse ist eine Beispielklasse, wenn ich sie ausführe. Beim Versenden von Nachrichten werden Anfragen gestellt und aus der Warteschlange entfernt. Ich kann es in der Konsole für ActiveMq sehen.
In der ersten Klasse schreibe ich einfach "chain.doFilter(request, Response)", um alle http-Anfragen an die entsprechende Ressource weiterzuleiten. Nun, wie es hier geht. Wo soll die HTTP-Anfrage platziert werden? Ich muss jede Anfrage asynchron bearbeiten. REST ist synchron.
Bitte schlagen Sie einen Weg vor. und erklären Sie Ihre Antwort.
Danke/Grüße
Kumar Shorav
Jersey Rest-Webdienst mit Activemq-Middleware-Integration ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post