rabbitmq的配置以及发送消息
我们平时在项目中,会用到rabbitmq来帮我们进行通知消息。。我们来看一下他是怎么用的。
引入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.amqp/spring-rabbit -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.7.5.RELEASE</version>
</dependency>
配置文件
首先我们要先在application配置文件中配置我们的rabbitmq的参数信息。下面举个例子
spring:
rabbitmq:
host: 10.1.92.8
port: 5970
username: guest
password: guest
创建配置类
@Data
@ConfigurationProperties(prefix = "spring.rabbitmq")
@Configuration
public class RabbitConsumerConfig {
/** 访问地址 */
private String host;
/** 访问端口 */
private String port;
/** 用户名 */
private String username;
/** 密码 */
private String password;
@Bean(name = "baseConnectionFactory")
public ConnectionFactory getCreditFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setAddresses(host + ":" + port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost("/");
// 发布确认,收到客户端响应才会被删除消息
connectionFactory.setPublisherConfirms(true);
return connectionFactory;
}
@Bean(name = "baseContainerFactory")
public SimpleRabbitListenerContainerFactory firstFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer, @Qualifier("baseConnectionFactory") ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
// 设置手动确认消费
factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
// 设置消费者个数
factory.setConcurrentConsumers(6);
configurer.configure(factory, connectionFactory);
return factory;
}
}
rabbitMqUtil类
设置rabbitMqUtil类来设置发送的方法
@Slf4j
@Component
public class RabbitMqUtil {
@Autowired
private AmqpTemplate amqpTemplate;
public void sendMqMessage(String routingKey, String exchange, String message) {
log.info("[RabbitMqUtil.sendMqMessage 发送mq消息start routingKey:{},exchange:{},message:{}]",routingKey,exchange,message);
amqpTemplate.convertAndSend(exchange,routingKey,message);
log.info("[RabbitMqUtil.sendMqMessage 发送mq消息end routingKey:{},exchange:{},message:{}]",routingKey,exchange,message);
}
}
消费
@Autowired
private RabbitMqUtil rabbitMqUtil;
public final static String BATCH_FRONT_EXCHANGE="aaa";//交换机名
public final static String BATCH_FRONT_ROUTING_KEY="a_1";//路由key
rabbitMqUtil.sendMqMessage(BATCH_FRONT_ROUTING_KEY,BATCH_FRONT_EXCHANGE,"发送的第一条消息");