• 使用springamqp发送消息及同步接收消息


     通过对spring-amqp看重要类的认识,下面来通过spring-amqp的发送消息及同步接收消息是如何实现的。有兴趣的朋友 可以去spring-amqp官网下载例子。

     先来看看HelloWorldConfiguration类

    package org.springframework.amqp.helloworld;
    
    import org.springframework.amqp.core.Queue;
    import org.springframework.amqp.rabbit.config.AbstractRabbitConfiguration;
    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.connection.SingleConnectionFactory;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class HelloWorldConfiguration extends AbstractRabbitConfiguration {
    
        protected final String helloWorldQueueName = "hello.world.queue";
    
        @Bean
        public ConnectionFactory connectionFactory() {
            SingleConnectionFactory connectionFactory = new SingleConnectionFactory(
                    "localhost");
            connectionFactory.setUsername("guest");
            connectionFactory.setPassword("guest");
            return connectionFactory;
        }
    
        @Override
        public RabbitTemplate rabbitTemplate() {
            RabbitTemplate template = new RabbitTemplate(connectionFactory());
            // The routing key is set to the name of the queue by the broker for the
            // default exchange.
            template.setRoutingKey(this.helloWorldQueueName);
            // // Where we will synchronously receive messages from
            template.setQueue(this.helloWorldQueueName);
            return template;
        }
    
        @Bean
        public Queue helloWorldQueue() {
            return new Queue(this.helloWorldQueueName);
        }
    }

    此类定义了ConnectionFactory 、RabbitTemplate 、Queue

    发送消息的程序如下:

    package org.springframework.amqp.helloworld;
    
    import org.springframework.amqp.core.AmqpTemplate;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class Producer {
    
        public static void main(String[] args) {
            ApplicationContext context = new AnnotationConfigApplicationContext(HelloWorldConfiguration.class);
            AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
            amqpTemplate.convertAndSend("Hello World");
            System.out.println("Sent: Hello World");
        }
    
    }

    同步接收消息如下:

    package org.springframework.amqp.helloworld;
    
    import org.springframework.amqp.core.AmqpTemplate;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class Consumer {
        
        public static void main(String[] args) {
            ApplicationContext context = new AnnotationConfigApplicationContext(HelloWorldConfiguration.class);
            AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
            System.out.println("Received: " + amqpTemplate.receiveAndConvert());
        }
    
    }

    这个例子是Exchange类型为DirectExchange. routingkey的名称默认为Queue的名称。

    对于 HelloWorldConfiguration类的配置,也可以通过SPRING XML文件来配置。例如

    rabbitConfiguration.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
        <!-- 创建connectionFactory -->
        <bean id="connectionFactory"
            class="org.springframework.amqp.rabbit.connection.SingleConnectionFactory">
            <constructor-arg value="localhost" />
            <property name="username" value="guest" />
            <property name="password" value="guest" />
        </bean>
        <bean id="rabbitAdmin"
            class="org.springframework.amqp.rabbit.core.RabbitAdmin">
            <constructor-arg ref="connectionFactory" />
        </bean>
        <bean id="rabbitTemplate"
            class="org.springframework.amqp.rabbit.core.RabbitTemplate">
            <constructor-arg ref="connectionFactory"></constructor-arg>
            <property name="queue" value="hello.world.queue"></property>
            <property name="routingKey" value="hello.world.queue"></property>
        </bean>
    
        <!-- 声明Queue并设定Queue的名称 -->
        <bean id="helloWorldQueue"
            class="org.springframework.amqp.core.Queue">
            <constructor-arg value="hello.world.queue"></constructor-arg>
        </bean>
        
    </beans>

    转载自:http://wubin850219.iteye.com/blog/1050279

  • 相关阅读:
    Python:文件操作技巧(File operation)
    使用多域名实现并行下载
    win7 + cygwin + nodejs很详细的安装步骤【推荐】
    gzip压缩
    C#中一些常用的方法使用
    C#中的@符号的使用
    Sql中partition by的使用
    C#中使用WCF一些常见问题及解决方案
    C# MVC中直接执行Js
    MVC路由规则进一步了解
  • 原文地址:https://www.cnblogs.com/yangzhilong/p/2880157.html
Copyright © 2020-2023  润新知