springboot2.0集成rabbitmq

springboot2.0集成rabbitmq

   最近需要用上rabbitmq,项目是用springboot搭建的,所以就要在springboot环境下单独集成rabbitmq,写这篇文章用来记录下。不多说了,进入正题。
   **1.首先引入Maven依赖:spring-boot-starter-amqp**
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-amqp</artifactId>
	</dependency>

   **2.application.xml中引入配置项:**
    	

		spring:
			   rabbitmq: 
			      host: 127.0.0.1
			      port: 5672
			      username: root
			      password: root
			      virtual-host: vhost_one
			      publisher-confirms: true
			      publisher-returns: true
	**3.接下来是生产者的配置,路由器和队列以及消息序列化的设置还需要在RabbitMqConfig类中设置生成:**
	
	import org.springframework.amqp.core.Binding;
	import org.springframework.amqp.core.BindingBuilder;
	import org.springframework.amqp.core.Queue;
	import org.springframework.amqp.core.TopicExchange;
	import org.springframework.amqp.rabbit.connection.ConnectionFactory;
	import org.springframework.amqp.rabbit.core.RabbitTemplate;
	import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
	import org.springframework.beans.factory.annotation.Qualifier;
	import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
	import org.springframework.context.annotation.Bean;
	import org.springframework.context.annotation.Configuration;
	
	
	@Configuration
	@EnableAutoConfiguration
	public class RabbitMqConfig {
		
		
		@Bean
		public RabbitTemplate setRabbitTemplate(ConnectionFactory connectionFactory) {
			RabbitTemplate rabbitTemplate = new RabbitTemplate();
			rabbitTemplate.setConnectionFactory(connectionFactory);
			rabbitTemplate.setExchange("topicExchange");
			// 设置消息内容序列化方式
			rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
			return rabbitTemplate;
		}
		
		/**
		 * 生成主题路由器
		 * @return
		 */
		@Bean("topicExchange")
		public TopicExchange topicExchange() {
			return new TopicExchange("topicExchange", true, false);
		}
		
		/**
		 * 定义发送短信的队列
		 * @return
		 */
		@Bean("sendSMSQueue")
		public Queue sendSMSQueue() {
			return new Queue("sendSMS", true, false, false);
		}
		
		/**
		 * 创建发送短信的队列和主题交换机的绑定关系
		 * @param queue
		 * @param exchange
		 * @return
		 */
		@Bean
		public Binding bingExchangeANDqueue(@Qualifier("sendSMSQueue")Queue queue, 		@Qualifier("topicExchange")TopicExchange exchange) {
			return BindingBuilder.bind(queue).to(exchange).with("common.sendSMS.#");
		}
	}
       上面配置好了RabbitTemplate和路由和队列以及绑定关系,在项目中直接调用RabbitTemplate的发送消息的方法即可:
	@Autowired
	private RabbitTemplate rabbitTemplate;
	
	@Override
	public void send() {
		rabbitTemplate.convertAndSend("common.sendSMS.msg", "rabbitmq发送短信1给你了");
	}
4.最后消费者端的消费配置:


     application.xml中引入配置项和生产者一样:
		spring:
			   rabbitmq: 
			      host: 127.0.0.1
			      port: 5672
			      username: root
			      password: root
			      virtual-host: vhost_one
			      publisher-confirms: true
			      publisher-returns: true
			      
             **同时也需要设置RabbitConfiguration来设置序列化的方式,就用spring提供的Jackson2JsonMessageConverter类来方序列化和序列化,RabbitConfiguration类如下:**
             
	    import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
    import  org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    
    @Configuration
    public class RabbitConfiguration {
    	
    	
    	@Bean
    	public SimpleRabbitListenerContainerFactory myFactory(
    			SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) {
    		SimpleRabbitListenerContainerFactory factory =
    				new SimpleRabbitListenerContainerFactory();
    		configurer.configure(factory, connectionFactory);
    		factory.setMessageConverter(new Jackson2JsonMessageConverter());
    		return factory;
    	}
    }
   调用示例:


    import org.springframework.amqp.rabbit.annotation.EnableRabbit;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    
    @Component
    @EnableRabbit
    public class Consumer {
    	
    	@RabbitListener(queues = "sendSMS", containerFactory = "myFactory")
    	public void sendMsg(String content) {
    		System.out.println(content);
    	}
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值