springboot 使用rabbitmq 入门例子

安装rabbitmq就不提了,直接看demo吧

首先是配置

spring.application.name=springboot-rabbitmq
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.virtual-host=/

config配置queues,topic,exchanges等

@Bean
	public Queue hellpQueue(){
		return new Queue("hello");
	}
	
	 @Bean
	    public Queue userQueue() {
	        return new Queue("user");
	    }
	    
	    //===============以下是验证topic Exchange的队列==========
	    @Bean
	    public Queue queueMessage() {
	        return new Queue("topic.message");
	    }

	    @Bean
	    public Queue queueMessages() {
	        return new Queue("topic.messages");
	    }
	  //===============以上是验证topic Exchange的队列==========
	    
	    
	    //===============以下是验证Fanout Exchange的队列==========
	    @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");
	    }
	    //===============以上是验证Fanout Exchange的队列==========
	    

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

	    /**
	     * 将队列topic.message与exchange绑定,binding_key为topic.message,就是完全匹配
	     * @param queueMessage
	     * @param exchange
	     * @return
	     */
	    @Bean
	    Binding bindingExchangeMessage(Queue queueMessage, TopicExchange exchange) {
	        return BindingBuilder.bind(queueMessage).to(exchange).with("topic.message");
	    }

	    /**
	     * 将队列topic.messages与exchange绑定,binding_key为topic.#,模糊匹配
	     * @param queueMessage
	     * @param exchange
	     * @return
	     */
	    @Bean
	    Binding bindingExchangeMessages(Queue queueMessages, TopicExchange exchange) {
	        return BindingBuilder.bind(queueMessages).to(exchange).with("topic.#");
	    }
	    
	    @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);
	    }

简单queues

sender:

@Component
public class HelloSender {
	 
	@Autowired
	private AmqpTemplate amqpTemplate;
	
	public void send(String msg){
		String smsg=msg+new Date();
		System.out.println("Sender1 : " + smsg);
		this.amqpTemplate.convertAndSend("hello", smsg);
	}
}

customer:

@Component
@RabbitListener(queues = "hello")
public class HelloCustomer {
	
	@RabbitHandler
	public void process(String hello){
		System.out.println("Receiver1  : " + hello);
	}
	
}

如果需要一对多,或者多对多,只需要复制一个customer就可以了,代码一样,就不介绍了

然后就是对象类型的传输:

建一个实体类User,切记实现implements Serializable序列化一下,也可以在方法里序列化,不过比较麻烦

sender:

public void sendUser() {
        User user=new User();
        user.setName("hzb");
        user.setPass("123456789");
        System.out.println("user send : " + user.getName()+"/"+user.getPass());
        this.amqpTemplate.convertAndSend("user", user);
    }

customer:

@Component
@RabbitListener(queues = "user")
public class UserReceiver {

    @RabbitHandler
    public void process(User user) {
        System.out.println("user receive  : " + user.getName()+"/"+user.getPass());
    }

}

本文章只介绍简单队列,exchanges和topic等请看下一篇

猜你喜欢

转载自blog.csdn.net/qq_38718211/article/details/81478383