All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.libgraviton.workerbase.WorkerConsumer Maven / Gradle / Ivy

/**
 * queue consumer - here we have the main logic
 */

package com.github.libgraviton.workerbase;

import com.fasterxml.jackson.jr.ob.JSON;
import com.github.libgraviton.workerbase.model.QueueEvent;
import com.rabbitmq.client.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

/**
 * 

WorkerConsumer class.

* * @author List of contributors {@literal } * @see http://swisscom.ch * @version $Id: $Id */ public class WorkerConsumer extends DefaultConsumer { private static final Logger LOG = LoggerFactory.getLogger(WorkerConsumer.class); private WorkerAbstract worker; private String queueName; /** * constructor * * @param channel channel * @param worker worker * @param queueName queueName */ public WorkerConsumer(Channel channel, WorkerAbstract worker, String queueName) { super(channel); this.worker = worker; this.queueName = queueName; } /** * {@inheritDoc} * * handles a delivery */ @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); LOG.info("Received '" + envelope.getDeliveryTag() + "':'" + message + "'"); // deserialize QueueEvent queueEvent = JSON.std.beanFrom(QueueEvent.class, message); // give to worker worker.handleDelivery(queueEvent, envelope.getDeliveryTag(), getChannel()); } @Override public void handleConsumeOk(String consumerTag) { LOG.info("Connection to message queue '" + queueName +"' established."); LOG.info("Waiting for messages..."); } @Override public void handleShutdownSignal(String consumerTag, ShutdownSignalException sig) { LOG.info("Lost connection to message queue '" + queueName + "'."); if(sig.getReference() instanceof Channel) { Channel channel = (Channel) sig.getReference(); Connection connection = channel.getConnection(); LOG.info("Channel is closed. Creating new channel for connection '" + connection + "'."); try { worker.getQueueManager().createChannel(connection); } catch (IOException e) { LOG.error("Cannot create channel for connection '" + connection + "'.", e); } } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy