Spring 集成 RabbitMQ 的几种方式练习

入门练习 1

pom.xml 文件配置:

<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
    <version>1.4.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.1.7.RELEASE</version>
</dependency>

spring 核心配置文件 rabbit-context.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" xmlns:rabbit="http://www.springframework.org/schema/rabbit" xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/rabbit
    http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">
    <rabbit:connection-factory id="connectionFactory" host="192.168.199.121" />
    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />
    <rabbit:admin connection-factory="connectionFactory" />
    <rabbit:queue name="helloworld.queue"></rabbit:queue>
</beans>

生产者代码:

public class Producer {

    private static ApplicationContext context;

    public static void main(String[] args) {
        context = new ClassPathXmlApplicationContext("rabbit-context.xml");
        AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
        amqpTemplate.convertAndSend("helloworld.queue", "Hello World Spring amqp");
    }

}

如果发送成功了,可以看到控制台显示:

信息: Created new connection: SimpleConnection@2a40cd94 [delegate=amqp://[email protected]:5672/]

消费者代码:

public class Consumer {
    private static ApplicationContext context;

    public static void main(String[] args) {
        context = new ClassPathXmlApplicationContext("rabbit-context.xml");
        AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
        String receiveStr = (String) amqpTemplate.receiveAndConvert("helloworld.queue");
        System.out.println(receiveStr);

    }

}

入门练习 2

根据 Spring 官网的 AMQP 模块写的练习:

pom.xml 片段(只用这一个片段)

<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
    <version>1.4.5.RELEASE</version>
</dependency>

不使用任何配置文件发送消息:

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;

public class SpringRabbitDemo {
    public static void main(String[] args) throws InterruptedException {

        CachingConnectionFactory cf = new CachingConnectionFactory("192.168.199.121");
        // RabbitAdmin 的作用感觉就是想是 Channel
        RabbitAdmin admin = new RabbitAdmin(cf);

        // 声明 queue
        Queue queue = new Queue("liwei-spring-queue");
        admin.declareQueue(queue);

        // 声明交换器
        TopicExchange exchange = new TopicExchange("liweiExchange");
        admin.declareExchange(exchange);

        String routingKey = "foo.*";
        Binding binding = BindingBuilder.bind(queue).to(exchange).with(routingKey );
        admin.declareBinding(binding );


        /**
         * 设置监听和容器
         */
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(cf);
        Object listner  = new Object(){
            public void handleMessage(String foo){
                System.out.println("Object 内部的方法:" + foo);
            }
        };
        MessageListenerAdapter adapter = new MessageListenerAdapter(listner);
        container.setMessageListener(adapter);
        container.setQueueNames("liwei-spring-queue");
        container.start();

        // 发送消息
        RabbitTemplate template = new RabbitTemplate(cf);
        template.convertAndSend("liweiExchange","foo.bar","spring story");
        Thread.sleep(1000);
        container.stop();


    }
}

控制台输出:

八月 26, 2015 3:59:29 下午 org.springframework.amqp.rabbit.connection.CachingConnectionFactory createBareConnection
信息: Created new connection: SimpleConnection@4f47d241 [delegate=amqp://[email protected]:5672/]
Object 内部的方法:spring story
八月 26, 2015 3:59:30 下午 org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer doShutdown
信息: Waiting for workers to finish.
八月 26, 2015 3:59:30 下午 org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer doShutdown
信息: Successfully waited for workers to finish.

入门练习 3

该练习亦来自官网的 Quick Start,只不过将 Java 代码片段改成 Spring 的核心配置文件。

pom.xml 文件片段:

<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
    <version>1.4.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.1.7.RELEASE</version>
</dependency>

Spring 核心配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:rabbit="http://www.springframework.org/schema/rabbit"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/rabbit
           http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">


    <rabbit:connection-factory id="connectionFactory" host="192.168.199.121"/> 

    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="wudiexchange" routing-key="foo.bar"></rabbit:template>

    <rabbit:queue name="wudiQueue"></rabbit:queue>

    <!-- 路由设置,将队列绑定,topic 类型 -->
    <rabbit:topic-exchange name="wudiExchange">
        <rabbit:bindings>
            <rabbit:binding pattern="foo.*" queue="wudiQueue"></rabbit:binding>
        </rabbit:bindings>
    </rabbit:topic-exchange>

    <!-- 监听类测试 -->
    <rabbit:listener-container connection-factory="connectionFactory">
        <rabbit:listener ref="foo" method="listen" queue-names="wudiQueue"/>
    </rabbit:listener-container>

    <bean id="foo" class="com.liwei.SpringRabbitmq.Foo"></bean>

</beans>

测试类文件:

通过spring 获得到连接,并发送消息。

public class TestSpringRabbitMQ {
    private static AbstractApplicationContext ctx;

    public static void main(String[] args) throws InterruptedException {
        ctx = new ClassPathXmlApplicationContext("context.xml");
        RabbitTemplate template = ctx.getBean(RabbitTemplate.class);
        template.convertAndSend("Spring Rain");
        Thread.sleep(1000);
        ctx.destroy();
    }
}

Foo 类用于监听消息:

public class Foo {

    public void listen(String foo ){
        System.out.println("监听的消息:" + foo);
    }
}

入门练习 4

什么配置文件都不要,简简单单地发送消息和接收消息。

pom.xml 文件只用引入一个依赖。

<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
    <version>1.4.5.RELEASE</version>
</dependency>

注意:先运行生产者,再运行消费者。

生产者:

public class Producer {
    public static void main(String[] args) {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory("192.168.199.121");
        AmqpAdmin admin = new RabbitAdmin(connectionFactory);
        admin.declareQueue(new Queue("myqueue"));

        AmqpTemplate template = new RabbitTemplate(connectionFactory);
        template.convertAndSend("myqueue", "Spring Rabbitmq");
    }
}

消费者:

public class Consumer {
    public static void main(String[] args) {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory("192.168.199.121");
        AmqpAdmin admin = new RabbitAdmin(connectionFactory);
        admin.declareQueue(new Queue("myqueue"));

        AmqpTemplate template = new RabbitTemplate(connectionFactory);

        String foo = (String) template.receiveAndConvert("myqueue");
        System.out.println(foo);
    }
}

入门练习 5

pom.xml

<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
    <version>1.4.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.1.7.RELEASE</version>
</dependency>

生产者:

public class Send {
    private static AbstractApplicationContext ctx;

    public static void main(String[] args) {
        ctx = new ClassPathXmlApplicationContext("rabbitmq.xml");
        AmqpTemplate template = ctx.getBean(AmqpTemplate.class);
        template.convertAndSend("guangQueue","周光");
        ctx.destroy();
    }
}

消费者:

public class Receive {
    private static AbstractApplicationContext ctx;

    public static void main(String[] args) {
        ctx = new ClassPathXmlApplicationContext("rabbitmq.xml");
        AmqpTemplate template = ctx.getBean(AmqpTemplate.class);
        String receiveStr = (String) template.receiveAndConvert("guangQueue");
        System.out.println(receiveStr);
        ctx.destroy();
    }
}

Spring 的核心配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">

    <rabbit:connection-factory id="connFactory" host="192.168.199.121"/>

    <rabbit:template id="template" connection-factory="connFactory"></rabbit:template>

    <rabbit:admin connection-factory="connFactory" />

    <rabbit:queue name="guangQueue"></rabbit:queue>
</beans>

入门练习 6

pom.xml

<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
    <version>1.4.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.1.7.RELEASE</version>
</dependency>

Spring 核心配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">

    <rabbit:connection-factory id="connFactory" host="192.168.199.121" />

    <rabbit:template id="template" connection-factory="connFactory"></rabbit:template>

    <rabbit:admin connection-factory="connFactory" />

    <rabbit:queue name="kunQueue"></rabbit:queue>
</beans>

生产者代码:

public class Send {
    private static AbstractApplicationContext ctx;

    public static void main(String[] args) {
        ctx = new ClassPathXmlApplicationContext("rabbitmq.xml");
        AmqpTemplate template = ctx.getBean(AmqpTemplate.class);
        template.convertAndSend("kunQueue","龚友坤");
        ctx.destroy();
    }
}

消费者代码:

public class Receive {
    private static AbstractApplicationContext ctx;

    public static void main(String[] args) {
        ctx = new ClassPathXmlApplicationContext("rabbitmq.xml");
        AmqpTemplate template = ctx.getBean(AmqpTemplate.class);
        String receiveStr = (String) template.receiveAndConvert("kunQueue");
        System.out.println(receiveStr);
        ctx.destroy();
    }
}

猜你喜欢

转载自blog.csdn.net/zz775854904/article/details/81093304