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

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

Introduction

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

Prototype

public TopicExchange(String name, 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));
    }//ww  w. j  a v a 2s. c o  m
    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;
}

From source file:org.springframework.amqp.rabbit.annotation.RabbitListenerAnnotationBeanPostProcessor.java

private Exchange topicExchange(org.springframework.amqp.rabbit.annotation.Exchange bindingExchange,
        String exchangeName) {// www .  j  a v a  2  s . c o  m
    return new TopicExchange(exchangeName, resolveExpressionAsBoolean(bindingExchange.durable()),
            resolveExpressionAsBoolean(bindingExchange.autoDelete()),
            resolveArguments(bindingExchange.arguments()));
}