springboot初学---rabbitmq的使用

1.jar包依赖

<!-- 配置rabbitMQ -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    <version>1.5.10.RELEASE</version>
</dependency>

2.application.properties配置文件

## 配置rabbitMQ
spring.application.name=spirng-boot-rabbitmq-example

spring.rabbitmq.host=192.168.80.6
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin

3.queue模式

<1>.一对一的字符串的简单传输

1).队列配置

/**
 * 队列的配置
 * @author mengjh
 *
 */
@Configuration
public class RabbitConfig {

    @Bean
    public Queue Queue() {
        return new Queue("hello");
    }
}

2).发送者

/**
 * hello的发送者
 * @author Leruan
 *
 */
@Component
public class HelloSender {

    @Autowired
    private AmqpTemplate rabbitTemplate;

    public void send() {
        String context = "hello " + new Date();
        System.out.println("Sender : " + context);
        this.rabbitTemplate.convertAndSend("hello", context);
    }

}

3).接受者

/**
 * hello的接受者
 * @author 
 *
 */
@Component
@RabbitListener(queues = "hello")
public class HelloReceiver {

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

}

4).测试

/**
 * rabbitmq的hello测试
 * @author
 *
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitMQHelloTest {
    @Autowired
    private HelloSender helloSender;

    @Test
    public void hello() throws Exception {
        helloSender.send();
    }
}

<2>.一对多和多对多传输

1).在配置队列中添加配置

@Bean
 /**
  * 测试多对多
  */
public Queue neoQueue() {
    return new Queue("neo");
}

2).发送者

@Component
public class NeoSender1 {

    @Autowired
    private AmqpTemplate rabbitTemplate;

    public void send(int i) {
        String context = "spirng boot neo queue" + " ****** " + i;
        System.out.println("Sender1 : " + context);
        this.rabbitTemplate.convertAndSend("neo", context);
    }

}



@Component
public class NeoSender2 {

    @Autowired
    private AmqpTemplate rabbitTemplate;

    public void send(int i) {
        String context = "spirng boot neo queue" + " ****** " + i;
        System.out.println("Sender2 : " + context);
        this.rabbitTemplate.convertAndSend("neo", context);
    }

}

 

3).接受者

@Component
@RabbitListener(queues = "neo")
public class NeoReceiver1 {

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

}


@Component
@RabbitListener(queues = "neo")
public class NeoReceiver2 {

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

}

 

4).测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class ManyTest {
    @Autowired
    private NeoSender1 neoSender1;

    @Autowired
    private NeoSender2 neoSender2;

    @Test
    public void oneToMany() throws Exception {
        for (int i=0;i<100;i++){
            neoSender1.send(i);
        }
    }

    @Test
    public void manyToMany() throws Exception {
        for (int i=0;i<100;i++){
            neoSender1.send(i);
            neoSender2.send(i);
        }
    }

}

<3>.传输对象和集合类型数据

1).在队列配置中添加配置

@Bean
/**
 * 对象
 */
public Queue objQueue() {
    return new Queue("object");
}

@Bean
/**
 * 集合
 */
public Queue listQueue() {
    return new Queue("list");
}

 

2).发送者

/**
 * rabbitmq传输对象-发送端
 * @author mengjh
 *
 */
@Component
public class ObjectSender {

    @Autowired
    private AmqpTemplate rabbitTemplate;


    public void send(UserEntity user) {
        System.out.println("Sender : " + user);
        this.rabbitTemplate.convertAndSend("object", user);
    }

}



/**
 * 测试rabbitMQ关于list--发送端
 * @author Leruan
 *
 */
@Component
public class ListSender {

    @Autowired
    private AmqpTemplate rabbitTemplate;

    public void send(List list) {

        System.out.println("Sender : " + list);
        this.rabbitTemplate.convertAndSend("list", list);
    }

}

 

3).接受者

/**
 * rabbitmq传输对象-接收端
 * @author mengjh
 *
 */
@Component
@RabbitListener(queues = "object")
public class ObjectReceiver {

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

}



/**
 * rabbitmq测试接收list
 * @author mengjh
 *
 */
@Component
public class ListReceiver {


    @RabbitListener(queues = "list")
    public void process(List<UserEntity> user) {
        System.out.println("Receiver  : " + user);
    }

}

 

4).测试

/**
 * rabbitmq的object测试
 * @author Leruan
 *
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitMQObjectTest {

    @Autowired
    private ObjectSender objSender;
    @Autowired
    private User1Mapper userMapper;

    @Test
    public void test() {

        objSender.send(userMapper.getOne(1));
    }
}



/**
 * rabbitmq的list测试
 * @author mengjh
 *
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitMQListTest {

    @Autowired
    private ListSender listSender;
    @Autowired
    private User1Mapper userMapper;

    @Test
    public void test() {
        List<UserEntity> users = userMapper.getAll();
        listSender.send(users);
    }
}

4.topic模式

<1>.配置topic的队列TopicRabbitConfig.java

@Configuration
public class TopicRabbitConfig {

    final static String message = "TopicName1";
    final static String messages = "TopicName2";

    @Bean
    public Queue queueMessage() {
        return new Queue(TopicRabbitConfig);
    }

    @Bean
    public Queue queueMessages() {
        return new Queue(TopicRabbitConfig.messages);
    }

    @Bean
    TopicExchange exchange() {
        return new TopicExchange("exchange");
    }

    @Bean
    Binding bindingExchangeMessage(Queue queueMessage, TopicExchange exchange) {
        return BindingBuilder.bind(queueMessage).to(exchange).with("topic.message");
    }

    @Bean
    Binding bindingExchangeMessages(Queue queueMessages, TopicExchange exchange) {
        return BindingBuilder.bind(queueMessages).to(exchange).with("topic.#");
    }
}

<2>.topic发送者

@Component
public class TopicSender {

    @Autowired
    private AmqpTemplate rabbitTemplate;

    public void send() {
        String context = "hi, i am message all";
        System.out.println("Sender : " + context);
        this.rabbitTemplate.convertAndSend("topicExchange", "topic.1", context);
    }

    public void send1() {
        String context = "hi, i am message 1";
        System.out.println("Sender : " + context);
        this.rabbitTemplate.convertAndSend("topicExchange", "topic.message", context);
    }

    public void send2() {
        String context = "hi, i am messages 2";
        System.out.println("Sender : " + context);
        this.rabbitTemplate.convertAndSend("topicExchange", "topic.messages", context);
    }

}

3).topic接受者

/**
 * 发布订阅方式的rabbitmq接收端1
 * @author mengjh
 *
 */
@Component
@RabbitListener(queues = "TopicName1")
public class TopicReceiver1 {

    @RabbitHandler
    public void process(String message) {
        System.out.println("Topic Receiver1  : " + message);
    }
}





/**
 * 发布订阅方式的rabbitmq接收端2
 * @author
 *
 */
@Component
@RabbitListener(queues = "TopicName2")
public class TopicReceiver2 {

    @RabbitHandler
    public void process(String message) {
        System.out.println("Topic Receiver2  : " + message);
    }
}

 <4>.测试

 

@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitMQTopicTest {
    @Autowired
    private TopicSender sender;

    @Test
    public void topic() throws Exception {
        sender.send();
    }

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

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

 5.Fanout广播模式

<1>.配置类

/**
 * 广播模式的配置类
 * @param CMessage
 * @param fanoutExchange
 * @return
 */
@Configuration
public class FanoutRabbitConfig {
	@Bean
	public Queue AMessage() {
		return new Queue("fanout.A");
	}

	@Bean
	public Queue BMessage() {
		return new Queue("fanout.B");
	}

	@Bean
	public Queue CMessage() {
		return new Queue("fanout.C");
	}

	@Bean
	FanoutExchange fanoutExchange() {
		return new FanoutExchange("fanoutExchange");
	}

	@Bean
	Binding bindingExchangeA(Queue AMessage, FanoutExchange fanoutExchange) {
		return BindingBuilder.bind(AMessage).to(fanoutExchange);
	}

	@Bean
	Binding bindingExchangeB(Queue BMessage, FanoutExchange fanoutExchange) {
		return BindingBuilder.bind(BMessage).to(fanoutExchange);
	}

	@Bean
	Binding bindingExchangeC(Queue CMessage, FanoutExchange fanoutExchange) {
		return BindingBuilder.bind(CMessage).to(fanoutExchange);
	}

}

  

<2>.发送者

/** 
 * 广播模式的发送者
 * @author 
 *
 */
@Component
public class FanoutSender {

	@Autowired
	private AmqpTemplate rabbitTemplate;

	public void send() {
		String context = "hi, fanout msg ";
		System.out.println("Sender : " + context);
		this.rabbitTemplate.convertAndSend("fanoutExchange", "", context);
	}

}

  

<3>.接受者

/**
 * 广播模式的接受者A
 * @author java_
 *
 */
@Component
@RabbitListener(queues = "fanout.A")
public class FanoutReceiverA {

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

}


/**
 * 广播模式的接受者B
 * @author java_
 *
 */
@Component
@RabbitListener(queues = "fanout.B")
public class FanoutReceiverB {

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

}


/**
 * 广播模式的接受者C
 * @author 
 *
 */
@Component
@RabbitListener(queues = "fanout.C")
public class FanoutReceiverC {

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

}

  

<4>.测试类

/**
 * 广播模式rabbitmq的测试
 * @author java_
 *
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class FanoutRabbitTest {

	@Autowired
	private FanoutSender sender;

	@Test
	public void fanoutSender() throws Exception {
		sender.send();
	}
}

  

posted @ 2019-01-24 16:46  MengJH  阅读(307)  评论(0编辑  收藏  举报