分享

使用spring

 寂灭太极 2015-03-27

 通过对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./schema/beans"
    xmlns:xsi="http://www./2001/XMLSchema-instance"
    xsi:schemaLocation="http://www./schema/beans http://www./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./blog/1050279

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多