<!-- ================== rabbitMq====================--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> <version>2.0.0.RELEASE</version> </dependency>
package com.doyd.config.rabbitmq; import com.doyd.config.rabbitmq.listener.CardCodeChannel; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * RabbitMQ 配置類 */ @Configuration @ConfigurationProperties(prefix = "spring.rabbitmq") @Slf4j @Getter @Setter public class RabbitConfig { /**主機*/ private String host; /**端口*/ private int port; /**用戶名*/ private String username; /**密碼*/ private String password; /**卡券空間*/ private String virtualCard; /** * 功能描述: 卡券rabbitMq配置 * @auther: huangsenming * @date: 2018/12/1 12:50 */ @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); setCommon(connectionFactory); connectionFactory.setVirtualHost(virtualCard); connectionFactory.addChannelListener(new CardCodeChannel()); return connectionFactory; } /** * 功能描述: 卡券rabbitMq配置 * @auther: huangsenming * @date: 2018/12/1 12:50 */ @Bean public RabbitTemplate rabbitCardTemplate() { return new RabbitTemplate(connectionFactory()); } /** * 功能描述:rabbit公共配置 * @auther: huangsenming * @date: 2018/10/15 15:56 */ private void setCommon(CachingConnectionFactory connectionFactory) { connectionFactory.setHost(host); connectionFactory.setPort(port); connectionFactory.setUsername(username); connectionFactory.setPassword(password); } }
spring.rabbitmq.password=root spring.rabbitmq.username=root spring.rabbitmq.host= 127.0.0.1 spring.rabbitmq.port= 5672 spring.rabbitmq.virtualCard=card_code
package com.doyd.queue; import com.alibaba.fastjson.JSON; import com.rabbitmq.client.Channel; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.support.converter.SimpleMessageConverter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * @Auther: huangsenming * @Date: 2018/12/1 12:54 * @Description: */ @Service @Slf4j public class CardQueueListen { @Autowired private RabbitTemplate rabbitCardTemplate; @RabbitListener(queues = "queue.card.off") public void cardOffDeal(Message message, Channel channel ){ SimpleMessageConverter d=new SimpleMessageConverter(); Object messObj=d.fromMessage(message); log.info("接收到的消息{}",JSON.toJSONString(messObj)); } }
若是隻是這樣配置須要單獨配置路由和隊列,增長一個channelListener就能夠在鏈接創建的時候,對路由以及隊列進行相關的配置java
package com.doyd.config.rabbitmq.listener; import com.rabbitmq.client.BuiltinExchangeType; import com.rabbitmq.client.Channel; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.connection.ChannelListener; import org.springframework.context.annotation.Configuration; import java.io.IOException; /** * @Auther: huangsenming * @Date: 2018/12/1 12:58 * @Description: rabbitMq初始化路由以及隊列數據 */ @Slf4j @Configuration public class CardCodeChannelListener implements ChannelListener { @Override public void onCreate(Channel channel, boolean transactional) { try { log.info("卡券相關的路由隊列綁定開始"); cardOffBind(channel,transactional); log.info("卡券相關的路由隊列綁定完成"); } catch (Exception e) { log.error("路由隊列綁定異常",e); } } private void cardOffBind(Channel channel, boolean transactional) throws Exception{ channel.exchangeDeclare("direct.card.off",BuiltinExchangeType.DIRECT); channel.queueDeclare("queue.card.off",true,true,false,null); channel.queueBind("queue.card.off","direct.card.off", "card.off"); } }