JAX-RS と jersey で開発された Restful サービス API があります。同じものを 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 クラスで何らかのリクエストが来ている場合は、何らかの認証メカニズムの後でリソースに直接転送しています。そのため、すべてのリクエストをキャッチするためにフィルターの概念を使用しています。
2番目のクラスは、実行中のクラスの例です。メッセージングはエンキューとデキューです。コンソールで ActiveMq を確認できます。
最初のクラスでは、すべての http リクエストをそれぞれのリソースに転送するために、単純に「chain.doFilter(request, response)」と書いています。今ここで行う方法。HTTP リクエストを配置する場所。各リクエストを非同期で処理する必要があります。REST は同期的です。
何らかの方法を提案してください。そしてあなたの答えを説明してください。
ありがとう/よろしく Kumar Shorav