Spring Boot 配置多个RabbitMQ,多个消息源发送不同服务器IP

项目代码构造 
这里写图片描述 

关注点在红框的代码。。。 

代码 
下面就把项目的代码展示下来 

application.properties 
配置文件 

spring.application.name=rabbitmq-hello 

# RabbitMQ 
spring.rabbitmq.first.host=node9 
spring.rabbitmq.first.port=5670 
spring.rabbitmq.first.username=guest 
spring.rabbitmq.first.password=guest 

spring.rabbitmq.second.host=localhost 
spring.rabbitmq.second.port=5672 
spring.rabbitmq.second.username=guest 
spring.rabbitmq.second.password=guest 


# MySQL 
spring.datasource.url = jdbc:mysql://localhost:3306/cloudtest 
spring.datasource.username = root 
spring.datasource.password = root 
spring.datasource.driverClassName = com.mysql.jdbc.Driver 

HelloApplication.java 
程序入口 

package com.paas.springboot.demo01; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 

@SpringBootApplication 
public class HelloApplication { 

    public static void main(String[] args) { 
        SpringApplication.run(HelloApplication.class, args); 
    } 




RabbitConfig.java 
RabbitMQ配置类 

package com.paas.springboot.demo01; 

import org.springframework.amqp.core.Queue; 
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; 
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; 
import org.springframework.amqp.rabbit.connection.ConnectionFactory; 
import org.springframework.amqp.rabbit.core.RabbitTemplate; 
import org.springframework.beans.factory.annotation.Qualifier; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.Primary; 

@Configuration 
public class RabbitConfig { 

    @Bean(name="firstConnectionFactory") 
    @Primary 
    public ConnectionFactory firstConnectionFactory( 
                                            @Value("${spring.rabbitmq.first.host}") String host, 
                                            @Value("${spring.rabbitmq.first.port}") int port, 
                                            @Value("${spring.rabbitmq.first.username}") String username, 
                                            @Value("${spring.rabbitmq.first.password}") String password 
                                            ){ 
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); 
        connectionFactory.setHost(host); 
        connectionFactory.setPort(port); 
        connectionFactory.setUsername(username); 
        connectionFactory.setPassword(password); 
        return connectionFactory; 
    } 

    @Bean(name="secondConnectionFactory") 
    public ConnectionFactory secondConnectionFactory( 
                                            @Value("${spring.rabbitmq.second.host}") String host, 
                                            @Value("${spring.rabbitmq.second.port}") int port, 
                                            @Value("${spring.rabbitmq.second.username}") String username, 
                                            @Value("${spring.rabbitmq.second.password}") String password 
                                            ){ 
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); 
        connectionFactory.setHost(host); 
        connectionFactory.setPort(port); 
        connectionFactory.setUsername(username); 
        connectionFactory.setPassword(password); 
        return connectionFactory; 
    } 

    @Bean(name="firstRabbitTemplate") 
    @Primary 
    public RabbitTemplate firstRabbitTemplate( 
                                            @Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory 
                                            ){ 
        RabbitTemplate firstRabbitTemplate = new RabbitTemplate(connectionFactory); 
        return firstRabbitTemplate; 
    } 

    @Bean(name="secondRabbitTemplate") 
    public RabbitTemplate secondRabbitTemplate( 
                                            @Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory 
                                            ){ 
        RabbitTemplate secondRabbitTemplate = new RabbitTemplate(connectionFactory); 
        return secondRabbitTemplate; 
    } 

    @Bean(name="firstFactory") 
    public SimpleRabbitListenerContainerFactory firstFactory( 
                                                        SimpleRabbitListenerContainerFactoryConfigurer configurer, 
                                                        @Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory        
                                                        ) { 
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); 
        configurer.configure(factory, connectionFactory); 
        return factory; 
    } 

    @Bean(name="secondFactory") 
    public SimpleRabbitListenerContainerFactory secondFactory( 
                                                        SimpleRabbitListenerContainerFactoryConfigurer configurer, 
                                                        @Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory           
                                                        ) { 
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); 
        configurer.configure(factory, connectionFactory); 
        return factory; 
    } 

    @Bean 
    public Queue firstQueue() { 
        System.out.println("configuration firstQueue ........................"); 
        return new Queue("hello1"); 
    } 

    @Bean 
    public Object secondQueue() { 
        System.out.println("configuration secondQueue ........................"); 
        return new Queue("hello2"); 
    } 


Receiver.java 
RabbitMQ中的消费者,接收first RabbitMQ中的队列hello1的数据 

package com.paas.springboot.demo01; 

import org.springframework.amqp.rabbit.annotation.RabbitHandler; 
import org.springframework.amqp.rabbit.annotation.RabbitListener; 
import org.springframework.stereotype.Component; 

@Component 
@RabbitListener(queues = "hello1", containerFactory="firstFactory") 
public class Receiver { 

    @RabbitHandler 
    public void process(String hello) { 
        System.out.println("Receiver : " + hello); 
    } 



Receiver2.java 
RabbitMQ中的消费者,接收second RabbitMQ中的队列hello2的数据 

package com.paas.springboot.demo01; 

import org.springframework.amqp.rabbit.annotation.RabbitHandler; 
import org.springframework.amqp.rabbit.annotation.RabbitListener; 
import org.springframework.stereotype.Component; 

@Component 
@RabbitListener(queues = "hello2", containerFactory="secondFactory" ) 
public class Receiver2 { 

    @RabbitHandler 
    public void process(String hello) { 
        System.out.println("Receiver : " + hello); 
    } 



Sender.java 
RabbitMQ中的生产者,发送消息到first RabbitMQ中的队列hello1和hello2 

package com.paas.springboot.demo01; 

import java.util.Date; 
import javax.annotation.Resource; 
import org.springframework.amqp.rabbit.core.RabbitTemplate; 
import org.springframework.stereotype.Component; 

@Component 
public class Sender { 

    @Resource(name="firstRabbitTemplate") 
    private RabbitTemplate firstRabbitTemplate; 

    public void send1() { 
        String context = "hello1 " + new Date(); 
        System.out.println("Sender : " + context); 
        this.firstRabbitTemplate.convertAndSend("hello1", context); 
    } 

    public void send2() { 
        String context = "hello2 " + new Date(); 
        System.out.println("Sender : " + context); 
        this.firstRabbitTemplate.convertAndSend("hello2", context); 
    } 



Sender2.java 
RabbitMQ中的生产者,发送消息到second RabbitMQ中的队列hello1和hello2 

package com.paas.springboot.demo01; 

import java.util.Date; 
import javax.annotation.Resource; 
import org.springframework.amqp.rabbit.core.RabbitTemplate; 
import org.springframework.stereotype.Component; 

@Component 
public class Sender { 

    @Resource(name="firstRabbitTemplate") 
    private RabbitTemplate firstRabbitTemplate; 

    public void send1() { 
        String context = "hello1 " + new Date(); 
        System.out.println("Sender : " + context); 
        this.firstRabbitTemplate.convertAndSend("hello1", context); 
    } 

    public void send2() { 
        String context = "hello2 " + new Date(); 
        System.out.println("Sender : " + context); 
        this.firstRabbitTemplate.convertAndSend("hello2", context); 
    } 



TestDemo01.java 
测试类,调用Sender发送消息 

package com.paas.springboot.demo01; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.test.SpringApplicationConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = HelloApplication.class) 
public class TestDemo01 { 

    @Autowired 
    private Sender sender; 

    @Autowired 
    private Sender2 sender2; 

    @Test 
    public void hello() throws Exception { 
        sender.send1(); 
        sender.send2(); 
    } 

    @Test 
    public void hello2() throws Exception { 
        sender2.send1(); 
        sender2.send2(); 
    } 


pom.xml 

http://lib.csdn.net/article/java/65386  原文出处 

展开阅读全文

没有更多推荐了,返回首页