美文网首页
Spring Boot RabbitMQ 入门(二) 环境搭建

Spring Boot RabbitMQ 入门(二) 环境搭建

作者: 5d44bc28b93d | 来源:发表于2017-02-15 16:30 被阅读750次

    1.Spring Boot 依赖引入

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.tzm </groupId>
        <artifactId>rabbitmq</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>rabbitmq</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.1.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.7</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-amqp</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    
    

    2.创建配置文件

    @Configuration
    public class RabbitConfig {
        public static final String EXCHANGE   = "spring-fanout-exchange";
    }
    
    

    3.配置工厂

    @Bean
        public CachingConnectionFactory connectionFactory(){
            CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
            connectionFactory.setAddresses("127.0.0.1:5672");
            connectionFactory.setUsername("guest");
            connectionFactory.setPassword("guest");
            connectionFactory.setVirtualHost("/");
            connectionFactory.setPublisherConfirms(true); //必须要设置
            return connectionFactory;
        }
    

    4.创建对列

     @Bean
        public Queue queue() {
            return new Queue("spring-queue", true); //队列持久
        }
        @Bean
        public Queue queue2() {
            return new Queue("spring-queue2", true); //队列持久
        }
    
    

    5.定义交换器

     @Bean
        public FanoutExchange fanoutExchange() {
            return new FanoutExchange(EXCHANGE);
        }
    

    6.定义消费者

     @Bean
        public SimpleMessageListenerContainer messageContainer() {
            SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());
            container.setQueues(queue());
            container.setExposeListenerChannel(true);
            container.setMaxConcurrentConsumers(1);
            container.setConcurrentConsumers(1);
            container.setAcknowledgeMode(AcknowledgeMode.MANUAL); //设置确认模式手工确认
            container.setMessageListener(new ChannelAwareMessageListener() {
                @Override
                public void onMessage(Message message, Channel channel) throws Exception {
                    byte[] body = message.getBody();
                              System.out.println("receive msg b: " + new String(body));
                              Thread.sleep(30000);
    
                    channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); //确认消息成功消费
    
                }
            });
            return container;
        }
    
        @Bean
        public SimpleMessageListenerContainer messageContainer2() {
            SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());
            container.setQueues(queue2());
            container.setExposeListenerChannel(true);
            container.setMaxConcurrentConsumers(1);
            container.setConcurrentConsumers(1);
            container.setAcknowledgeMode(AcknowledgeMode.MANUAL); //设置确认模式手工确认
            container.setMessageListener(new ChannelAwareMessageListener() {
                @Override
                public void onMessage(Message message, Channel channel) throws Exception {
                    byte[] body = message.getBody();
                    System.out.println("receive msg a: " + new String(body));
                    Thread.sleep(30000);
                    channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); //确认消息成功消费
    
    
                }
            });
            return container;
        }
    

    此时我们启动项目,打开RabbitMQ的后台管理界面可以看到工厂为我们创建好了链接,

    conn.png

    我们的channel也有了

    chan.png

    对列:

    que.png

    交换器:


    exchange

    但是我们发现交换器上没有绑定任何对列:

    12.png

    所以就需要下一步绑定

    7.绑定对列与交换器

     @Bean
        public Binding binding() {
            return BindingBuilder.bind(queue()).to(fanoutExchange());
        }
        @Bean
        public Binding binding2() {
            return BindingBuilder.bind(queue2()).to(fanoutExchange());
        }
    

    再次启动项目观察后台管理,此时对列已经与交换器进行绑定了

    bind.png

    8.最后

    将会在下一章节通过此代码来实现三种交换模式之一FanoutExchange 的特性检测

    相关文章

      网友评论

          本文标题:Spring Boot RabbitMQ 入门(二) 环境搭建

          本文链接:https://www.haomeiwen.com/subject/yemqwttx.html