Example usage for org.springframework.amqp.core CustomExchange CustomExchange

List of usage examples for org.springframework.amqp.core CustomExchange CustomExchange

Introduction

In this page you can find the example usage for org.springframework.amqp.core CustomExchange CustomExchange.

Prototype

public CustomExchange(String name, String type, boolean durable, boolean autoDelete,
            Map<String, Object> arguments) 

Source Link

Usage

From source file:com.jbrisbin.groovy.mqdsl.RabbitMQBuilder.java

@Override
protected Object createNode(Object o, final Map params) {
    if (log.isDebugEnabled()) {
        log.debug(String.format("createNode(Object o, Map params): %s, %s", o, params));
    }/*from  ww w.  j  a  va 2  s  .  c  om*/
    String node = o.toString();
    if (ON.equals(node)) {
        // Event handlers
        for (Map.Entry<String, Closure> entry : ((Map<String, Closure>) params).entrySet()) {
            String eventName = entry.getKey();
            List<Closure> handlers;
            if (eventHandlers.containsKey(eventName)) {
                handlers = eventHandlers.get(eventName);
            } else {
                handlers = new ArrayList<Closure>();
                eventHandlers.put(eventName, handlers);
            }
            if (entry.getValue() instanceof List) {
                for (Closure cl : (List<Closure>) entry.getValue()) {
                    handlers.add(cl);
                }
            } else if (entry.getValue() instanceof Closure) {
                Closure cl = entry.getValue();
                cl.setProperty(NAME, eventName);
                handlers.add(cl);
            }
        }
        return null;
    } else if (EXCHANGE.equals(node)) {
        boolean durable = params.containsKey(DURABLE) ? (Boolean) params.get(DURABLE) : false;
        boolean autoDelete = params.containsKey(AUTO_DELETE) ? (Boolean) params.get(AUTO_DELETE) : false;
        Map arguments = params.containsKey(ARGUMENTS) ? (Map) params.get(ARGUMENTS) : null;
        currentRoutingKey = null;

        Exchange exchange = null;
        String name = null;
        if (params.containsKey(NAME)) {
            name = params.get(NAME).toString();
        }
        if (params.containsKey(TYPE)) {
            String type = params.containsKey(TYPE) ? params.get(TYPE).toString() : DIRECT;
            if (DIRECT.equals(type)) {
                exchange = new DirectExchange(name, durable, autoDelete, arguments);
            } else if (TOPIC.equals(type)) {
                exchange = new TopicExchange(name, durable, autoDelete, arguments);
            } else if (FANOUT.equals(type)) {
                exchange = new FanoutExchange(name, durable, autoDelete, arguments);
            } else if (HEADERS.equals(type)) {
                exchange = new HeadersExchange(name, durable, autoDelete, arguments);
            } else {
                exchange = new CustomExchange(name, type, durable, autoDelete, arguments);
            }
            currentExchange = exchange;

        } else {
            currentExchange = new DirectExchange(name);
        }
        try {
            rabbitAdmin.declareExchange(currentExchange);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            dispatchError(e);
        }

        return exchange;
    } else if (QUEUE.equals(node)) {
        boolean durable = params.containsKey(DURABLE) ? (Boolean) params.get(DURABLE) : false;
        boolean autoDelete = params.containsKey(AUTO_DELETE) ? (Boolean) params.get(AUTO_DELETE) : true;
        String routingKey = params.containsKey(ROUTING_KEY) ? params.get(ROUTING_KEY).toString() : null;
        if (null != routingKey) {
            currentRoutingKey = routingKey;
        }
        boolean exclusive = params.containsKey(EXCLUSIVE) ? (Boolean) params.get(EXCLUSIVE) : false;
        Map arguments = params.containsKey(ARGUMENTS) ? (Map) params.get(ARGUMENTS) : null;

        Queue q = null;
        String name;
        if (params.containsKey(NAME)) {
            try {
                if (null == params.get(NAME)) {
                    name = null;
                } else {
                    name = params.get(NAME).toString();
                }

                if (name == null) {
                    q = rabbitAdmin.declareQueue();
                } else {
                    q = new Queue(name, durable, exclusive, autoDelete);
                    rabbitAdmin.declareQueue(q);
                }
                currentQueue = q;

                if (null != currentExchange) {
                    Binding binding = null;
                    if (currentExchange instanceof FanoutExchange) {
                        binding = BindingBuilder.bind(q).to((FanoutExchange) currentExchange);
                    } else if (currentExchange instanceof DirectExchange) {
                        binding = BindingBuilder.bind(q).to((DirectExchange) currentExchange).with(routingKey);
                    } else if (currentExchange instanceof HeadersExchange) {
                        binding = BindingBuilder.bind(q).to((HeadersExchange) currentExchange)
                                .whereAll(arguments).match();
                    } else if (currentExchange instanceof TopicExchange) {
                        binding = BindingBuilder.bind(q).to((TopicExchange) currentExchange).with(routingKey);
                    } else if (currentExchange instanceof CustomExchange) {
                        binding = BindingBuilder.bind(q).to(currentExchange).with(routingKey).noargs();
                    }

                    if (null != binding) {
                        rabbitAdmin.declareBinding(binding);
                    }
                }
            } catch (Exception e) {
                log.error(e.getMessage(), e);
                dispatchError(e);
            }
        }
        return q;
    }

    return null;
}