SpringBoot整合多个Mq服务做法详解
chenxianchong 人气:0以rabbitmq为例
springboot项目想要整合rabbitmq非常简单,只需要在maven中引入对应的starter即可
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
然后只需要在配置文件中配置spring.rabbitmq.***即可使用。
如果我们项目中需要配置多个mq服务的时候,springboot便不能帮我们自动加载了,我们需要手动加载对应RabbitTemplate。
具体做法如下:
1、自定义一个MqTemplate
@Data @Component public class MqTemplate { private RabbitTemplate rabbitTemplate; private String exchange; private String queue; private String routing_key; }
在这里面我们定义了RabbitTemplate、交换机、路由,队列,如果需要其他的数据,也可以往上加
2、定义一个mq配置项相对应的类
@Data @Component class MqConfiguration { private String host; private Integer port; private String user; private String password; private String exchange; private String queue; private String routing_key; }
这个类的作用是将我们配置文件中的信息转成实体类
3、将我们自定义的mq配置定义成MqTemplate类型的bean
@Configuration public class MqConfig { @Bean @ConfigurationProperties(prefix = "mq.task-update-mq") public MqConfiguration taskUpdateMqConfiguration(){ return new MqConfiguration(); } @Bean public MqTemplate taskUpdateMq(MqConfiguration taskUpdateMqConfiguration) { CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); connectionFactory.setHost(taskUpdateMqConfiguration.getHost()); connectionFactory.setPort(taskUpdateMqConfiguration.getPort()); connectionFactory.setUsername(taskUpdateMqConfiguration.getUser()); connectionFactory.setPassword(taskUpdateMqConfiguration.getPassword()); connectionFactory.setVirtualHost("/"); connectionFactory.setPublisherConfirms(true); //必须要设置 RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); MqTemplate mqTemplate = new MqTemplate(); mqTemplate.setRabbitTemplate(rabbitTemplate); mqTemplate.setExchange(taskUpdateMqConfiguration.getExchange()); mqTemplate.setQueue(taskUpdateMqConfiguration.getQueue()); mqTemplate.setRouting_key(taskUpdateMqConfiguration.getRouting_key()); return mqTemplate; } }
这里我们就将该mq配置加载成一个名为taskUpdateMq的bean。当需要添加其他的mq服务的时候,我们只需要在这个配置类里面定义bean即可
4、使用对应的Template发送消息
首先我们把taskUpdateMq注入到业务代码中
@Autowired MqTemplate taskUpdateMq;
然后我们定义 一个发送延迟消息的接口方法
public interface MessageService { void sendDelayMessage(MqTemplate mqTemplate, String msg, Integer delay); }
@Service public class MessageServiceImpl implements MessageService { @Override public void sendDelayMessage(MqTemplate mqTemplate, String msg, Integer delay) { mqTemplate.getRabbitTemplate().convertAndSend(mqTemplate.getExchange(), mqTemplate.getRouting_key(), msg, message -> { message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT); message.getMessageProperties().setDelay(delay); message.getMessageProperties().setContentType("application/json"); return message; }); } }
调用方法的时候将MqTemplate对象传入就好了。
加载全部内容