use of org.fusesource.stomp.codec.StompFrame in project camel by apache.
the class StompProducerTest method testProduce.
@Test
public void testProduce() throws Exception {
if (!canTest()) {
return;
}
context.addRoutes(createRouteBuilder());
context.start();
Stomp stomp = createStompClient();
final BlockingConnection subscribeConnection = stomp.connectBlocking();
StompFrame frame = new StompFrame(SUBSCRIBE);
frame.addHeader(DESTINATION, StompFrame.encodeHeader("/queue/test"));
frame.addHeader(ID, subscribeConnection.nextId());
StompFrame response = subscribeConnection.request(frame);
final CountDownLatch latch = new CountDownLatch(numberOfMessages);
Thread thread = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < numberOfMessages; i++) {
try {
StompFrame frame = subscribeConnection.receive();
frame.contentAsString().startsWith("test message ");
latch.countDown();
} catch (Exception e) {
e.printStackTrace();
break;
}
}
}
});
thread.start();
Producer producer = context.getEndpoint("direct:foo").createProducer();
for (int i = 0; i < numberOfMessages; i++) {
Exchange exchange = producer.createExchange();
exchange.getIn().setBody(("test message " + i).getBytes("UTF-8"));
producer.process(exchange);
}
latch.await(20, TimeUnit.SECONDS);
assertTrue("Messages not consumed = " + latch.getCount(), latch.getCount() == 0);
}
use of org.fusesource.stomp.codec.StompFrame in project camel by apache.
the class StompEndpoint method doStart.
@Override
protected void doStart() throws Exception {
final Promise<CallbackConnection> promise = new Promise<>();
stomp = new Stomp(configuration.getBrokerURL());
stomp.setLogin(configuration.getLogin());
stomp.setPasscode(configuration.getPasscode());
if (configuration.getSslContextParameters() != null) {
stomp.setSslContext(configuration.getSslContextParameters().createSSLContext(getCamelContext()));
}
stomp.connectCallback(promise);
if (configuration.getHost() != null && !configuration.getHost().isEmpty()) {
stomp.setHost(configuration.getHost());
}
connection = promise.await();
connection.getDispatchQueue().execute(new Task() {
@Override
public void run() {
connection.receive(new Callback<StompFrame>() {
@Override
public void onFailure(Throwable value) {
if (started.get()) {
connection.close(null);
}
}
@Override
public void onSuccess(StompFrame value) {
if (!consumers.isEmpty()) {
Exchange exchange = createExchange();
exchange.getIn().setBody(value.content());
for (StompConsumer consumer : consumers) {
consumer.processExchange(exchange);
}
}
}
});
connection.resume();
}
});
}
use of org.fusesource.stomp.codec.StompFrame in project camel by apache.
the class StompEndpoint method addConsumer.
void addConsumer(final StompConsumer consumer) {
connection.getDispatchQueue().execute(new Task() {
@Override
public void run() {
StompFrame frame = new StompFrame(SUBSCRIBE);
frame.addHeader(DESTINATION, StompFrame.encodeHeader(destination));
frame.addHeader(ID, consumer.id);
connection.send(frame, null);
}
});
consumers.add(consumer);
}
use of org.fusesource.stomp.codec.StompFrame in project camel by apache.
the class StompEndpoint method removeConsumer.
void removeConsumer(final StompConsumer consumer) {
connection.getDispatchQueue().execute(new Task() {
@Override
public void run() {
StompFrame frame = new StompFrame(UNSUBSCRIBE);
frame.addHeader(DESTINATION, StompFrame.encodeHeader(destination));
frame.addHeader(ID, consumer.id);
connection.send(frame, null);
}
});
consumers.remove(consumer);
}
use of org.fusesource.stomp.codec.StompFrame in project camel by apache.
the class StompEndpoint method send.
protected void send(final Exchange exchange, final AsyncCallback callback) {
final StompFrame frame = new StompFrame(SEND);
frame.addHeader(DESTINATION, StompFrame.encodeHeader(destination));
//Fix for CAMEL-9506 leveraging the camel converter to do the change
frame.content(utf8(exchange.getIn().getBody(String.class)));
connection.getDispatchQueue().execute(new Task() {
@Override
public void run() {
connection.send(frame, new Callback<Void>() {
@Override
public void onFailure(Throwable e) {
exchange.setException(e);
callback.done(false);
}
@Override
public void onSuccess(Void v) {
callback.done(false);
}
});
}
});
}
Aggregations