Веб-сервис отдыха Джерси с интеграцией промежуточного программного обеспечения Activemq
У меня есть API сервиса Restful, разработанный с использованием JAX-RS и трикотажа. Я развернул то же самое в TOMCAT 7. Теперь я хотел бы реализовать Activemq, чтобы хранить все запросы в очереди и обрабатывать ресурс запроса. Как это сделать и интегрировать с tomcat7. Как интегрировать ActiveMq с Tomcat7 или моим веб-приложением службы отдыха. Как позвонить в сервис.
Важно:- Внутри 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, я пересылаю напрямую к ресурсам после некоторого механизма аутентификации. Вот почему я использую концепцию фильтра для перехвата всех запросов.
Второй класс - это пример класса, когда я бегу; обмен сообщениями вызывает и исключает; Я вижу в консоли для ActiveMq.
В первом классе я просто пишу "chain.doFilter(request, response)", чтобы переслать весь http-запрос на соответствующий ресурс. Теперь, как это сделать здесь. Куда поместить HTTP-запрос. Мне нужно обрабатывать каждый запрос асинхронно. ОТДЫХ синхронный.
Пожалуйста, предложите какой-нибудь способ. и объясни свой ответ.
Спасибо / С уважением Кумар Шорав
3 ответа
Вы видели документацию REST на Apache ActiveMQ: http://activemq.apache.org/rest.html
Также вы говорите о встраивании ActiveMQ в качестве брокера в Tomcat, или вы запускаете ActiveMQ-брокер в отдельной коробке /jvm?
Как автономный ActiveMQ имеет REST API из коробки, как указано в этой ссылке выше.
Пожалуйста, обратитесь: http://java.dzone.com/articles/jms-activemq
это решит вашу проблему, просто сделайте одну функцию для отправки сообщения и включите ее в свой процесс, где вы этого не хотите.
Причины, по которым вы видите консоль администратора ActiveMQ при попадании URL-адреса покоя из-за отсутствия учетных данных, передайте учетные данные, используя обычную проверку подлинности. Я написал отличный клиент для вызова остальных URL. Вы можете использовать что-то подобное....
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();