spring boot rabbitMq

rabbitMq 是什么?

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

rabbitMq 可以做什么?

消息系统允许软件、应用相互连接和扩展.这些应用可以相互链接起来组成一个更大的应用,或者将用户设备和数据进行连接.消息系统通过将消息的发送和接收分离来实现应用程序的异步和解偶. 或许你正在考虑进行数据投递,非阻塞操作或推送通知。或许你想要实现发布/订阅,异步处理,或者工作队列。所有这些都可以通过消息系统实现。

RabbitMQ是一个消息代理 - 一个消息系统的媒介。它可以为你的应用提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全。

如何使用:

spring boot 使用消息队列

  1. pom 引入依赖

     	<dependency>
     			<groupId>org.springframework.boot</groupId>
     			<artifactId>spring-boot-starter-amqp</artifactId>
     	</dependency>
     	<dependency>
     			<groupId>org.springframework.boot</groupId>
     			<artifactId>spring-boot-starter-web</artifactId>
     	</dependency>
    
  2. application.yml

    spring: rabbitmq: host: 127.0.0.1 port: 5672 username: guest password: guest

  3. 配置queue

     @Configuration
     public class RabbitConfig {
    
     	//queue
    
     	@Bean
     	public Queue helloQueue() {
     			return  new Queue("hello");
     	}
    
     	@Bean
     	public Queue topicMessage() {
     			return new Queue("topic.message");
     	}
    
     	@Bean
     	public Queue fanoutQueue() {
     			return new Queue("fanout.A");
     	}
    
     	//exchange
     	@Bean
     	TopicExchange exchange() {
     			return new TopicExchange("exchange");
     	}
     	@Bean
     	FanoutExchange fanoutExchange() {
     			return new FanoutExchange("fanoutExchange");
     	}
    
     	//bind
     	//绑定单个topicExchange
     	@Bean
     	Binding bindingExchangeMessage(Queue topicMessage, TopicExchange exchange) {
     			return BindingBuilder.bind(topicMessage).to(exchange).with("topic.message");
     	}
    
     	//绑定多个topicExchange
     	@Bean
     	Binding bindingExchangeMessages(Queue topicMessage, TopicExchange exchange) {
     			return BindingBuilder.bind(topicMessage).to(exchange).with("topic.#");
     	}
    
    
     	//绑定单个 fanoutExchange
     	@Bean
     	Binding bindingFanoutExchange(Queue fanoutQueue ,FanoutExchange fanoutExchange) {
     			return BindingBuilder.bind(fanoutQueue).to(fanoutExchange);
     	}
    

    }

3.配置消费者

@Component
@RabbitListener(queues= {"hello"})
public class HelloReceive {

		@RabbitHandler
		public  void helloProcess(String message){
				System.out.println(message);
		}
}
  1. 配置生生产者

    @Component public class HelloSender {

     	@Autowired
     	AmqpTemplate amqpTemplate;
    
     	public void sendHello(String message){
     			amqpTemplate.convertAndSend("hello",message);
     	}
    

    }

5 .测试接口

@RestController
@RequestMapping("/rabbit")
public class RabbitController {

		@Autowired
		HelloSender helloSender;

		@RequestMapping("/hello")
		public Object helloRabbit(String message){

				helloSender.sendHello(message);

				return "success";
		}
}