4

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

4

2 に答える 2

0

Apache ActiveMQ の REST ドキュメントを見ましたか: http://activemq.apache.org/rest.html

また、Tomcat 内に ActiveMQ をブローカーとして埋め込むことについて話しているのですか、それとも別のボックス/jvm で ActiveMQ ブローカーを実行しますか?

上記のリンクに記載されているように、スタンドアロンの ActiveMQ にはすぐに使用できる REST API があります。

于 2013-11-03T09:31:46.417 に答える
0

資格情報が不足しているために残りの URL にアクセスしているときに ActiveMQ 管理コンソールが表示される理由は、基本認証を使用して資格情報を渡してください。残りの URL を呼び出す groovy クライアントを作成しました。あなたは似たようなものを使うことができます....

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();
于 2015-08-16T00:59:43.807 に答える