本文主要讲述一下几个方面
一、RabbitMQ集成springboot
二、异步消息、应用解的实现
RabbitMQ集成springboot
1、使用idea搭建springboot工程(这个很简单就不说了)
2、添加依赖,其pom文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jdr.maven.rabbitmq</groupId>
<artifactId>rabbitmq-application</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>rabbitmq-application</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3、配置RabbitMQ的基本信息(application.properties)
spring.rabbitmq.addresses=localhost:5672
spring.rabbitmq.username=jdr
spring.rabbitmq.password=123
# 如果要进行消息回调,则这里必须要设置为true
spring.rabbitmq.publisher-confirms=true
# 虚拟仓库,类似于mysql的数据库
spring.rabbitmq.virtual-host=/myVirtualHosts
4、开始编码
业务一、用户注册后通过消息通知邮件系统与短信系统,告知他们发送对应的信息
配置队列
package com.vcredit.jdr.rabbitmq.config;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QueueConfig {
/**
* 短信发送队列
*
* @return
*/
@Bean
public Queue sendSmsQueue() {
return new Queue(QueueNameConfig.SEND_SMS_QUEUE);
}
/**
* 邮箱发送队列
*
* @return
*/
@Bean
public Queue sendEmailQueue() {
return new Queue(QueueNameConfig.SEND_EMAIL_QUEUE);
}
}
package com.vcredit.jdr.rabbitmq.config;
public class QueueNameConfig {
public static final String SEND_SMS_QUEUE = "send.sms";
public static final String SEND_EMAIL_QUEUE = "send.email";
}
用户注册系统
package com.vcredit.jdr.rabbitmq.asyn;
import com.vcredit.jdr.rabbitmq.config.QueueNameConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import java.text.MessageFormat;
/**
* @author zhoude
* @Description 用户注册
* @date 2018/8/9
*/
@Controller
public class UserRegister {
@Autowired
private RabbitTemplate rabbitTemplate;
/**
* 用户注册,并发送消息给短信、邮箱接口
* @param userId 用户id
*/
public void register(String userId) {
System.err.println(MessageFormat.format("用户{0}注册成功", userId));
rabbitTemplate.convertAndSend(QueueNameConfig.SEND_SMS_QUEUE, "短信已发送至:" + userId);
rabbitTemplate.convertAndSend(QueueNameConfig.SEND_EMAIL_QUEUE, "邮箱已发送至:" + userId);
}
}
短信系统
package com.vcredit.jdr.rabbitmq.asyn;
import com.vcredit.jdr.rabbitmq.config.QueueNameConfig;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* @author zhoude
* @Description 注册成功后发送短信
* @date 2018/8/9
*/
@Component
@RabbitListener(queues = QueueNameConfig.SEND_SMS_QUEUE)
public class SendSms {
/**
* 发送短信
* @param message
*/
@RabbitHandler
public void sendSms(String message) {
System.err.println(message);
System.err.println("短信发送成功");
}
}
邮件系统
package com.vcredit.jdr.rabbitmq.asyn;
import com.vcredit.jdr.rabbitmq.config.QueueNameConfig;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* @author zhoude
* @Description 注册成功后发送邮箱
* @date 2018/8/9
*/
@Component
@RabbitListener(queues = QueueNameConfig.SEND_EMAIL_QUEUE)
public class SendEmail {
/**
* 发送邮箱
* @param message
*/
@RabbitHandler
public void sendEmail(String message){
System.err.println(message);
System.err.println("邮箱发送成功");
}
}