利用spring boot和rabbitMQ写一个定时发送通知 的功能
时间: 2023-07-16 22:13:53 浏览: 77
首先,你需要在Spring Boot项目中添加RabbitMQ的依赖。可以在pom.xml文件中添加下面的依赖:
```xml
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>2.3.11.RELEASE</version>
</dependency>
```
然后,你需要创建一个RabbitMQ配置类,配置连接工厂、交换机、队列等信息。可以参考下面的代码:
```java
@Configuration
public class RabbitMQConfig {
@Value("${spring.rabbitmq.host}")
private String host;
@Value("${spring.rabbitmq.port}")
private int port;
@Value("${spring.rabbitmq.username}")
private String username;
@Value("${spring.rabbitmq.password}")
private String password;
@Value("${spring.rabbitmq.virtual-host}")
private String virtualHost;
@Value("${rabbitmq.exchange}")
private String exchange;
@Value("${rabbitmq.queue}")
private String queue;
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory factory = new CachingConnectionFactory();
factory.setHost(host);
factory.setPort(port);
factory.setUsername(username);
factory.setPassword(password);
factory.setVirtualHost(virtualHost);
return factory;
}
@Bean
public DirectExchange directExchange() {
return new DirectExchange(exchange);
}
@Bean
public Queue queue() {
return new Queue(queue);
}
@Bean
public Binding binding() {
return BindingBuilder.bind(queue()).to(directExchange()).with(queue());
}
}
```
在上面的代码中,我们使用@Value注解将一些配置信息从配置文件中读取出来,并将它们注入到相应的属性中。我们创建了一个连接工厂、一个直连交换机、一个队列,并将它们绑定在一起。
接下来,我们需要编写一个定时任务,每隔一段时间就发送一条消息到RabbitMQ中。可以使用Spring Boot提供的@Scheduled注解来实现定时任务。可以参考下面的代码:
```java
@Component
public class MessageSender {
@Autowired
private RabbitTemplate rabbitTemplate;
@Value("${rabbitmq.exchange}")
private String exchange;
@Value("${rabbitmq.queue}")
private String queue;
@Scheduled(fixedDelay = 10000)
public void sendMessage() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String message = "Hello, it is now " + dateFormat.format(new Date());
rabbitTemplate.convertAndSend(exchange, queue, message);
System.out.println("Sent message: " + message);
}
}
```
在上面的代码中,我们创建了一个名为MessageSender的组件,并使用@Autowired注解将RabbitTemplate注入到它的属性中。我们还使用@Value注解将交换机和队列的名称从配置文件中读取出来。
我们使用@Scheduled注解来指定定时任务的执行时间。在本例中,我们每隔10秒钟发送一条消息。在sendMessage方法中,我们使用SimpleDateFormat类创建了一个格式化的时间字符串,并将它作为消息发送到了RabbitMQ中。
最后,我们需要在配置文件中添加一些RabbitMQ的配置信息,如下所示:
```properties
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
rabbitmq.exchange=notification-exchange
rabbitmq.queue=notification-queue
```
在上面的配置信息中,我们指定了RabbitMQ的连接信息,以及交换机和队列的名称。
现在,我们已经完成了利用Spring Boot和RabbitMQ实现定时发送通知功能的代码编写。当应用程序启动后,它会每隔10秒钟向RabbitMQ中发送一条消息。你可以在控制台输出中看到发送的消息。
阅读全文