写在前面,mq简称消息队列,本文介绍的是activemq.那mq主要用在什么场景,他的作用又是什么呢?
介绍:mq称为消息中间件,语言表达不如看图.
顾名思义,mq主要还是为了提高服务器响应速度,提高客户体验.举个例子大家就应该明白了。
比如当用户登录某商城后,点击某商品要求发送邮件或者发送短信,此时邮件和短信是有可能失败的,如果同步的话必然会引起客户长时间等待,不利于客户体验(mq是异步).所以mq可以设置一个定时器,每隔一段时间对于发送失败的邮件和短信重新发送。
第一步:新建marven项目。
第二步:在resource当中新建application.yml文件
然后在里面输入:
spring:
activemq:
broker-url: tcp://127.0.0.1:61616
user: admin
password: admin
queue: sunjian
server:
port: 8081
第三步:在pom当中引入springboot
<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.sunjian.activemq.producer</groupId>
<artifactId>sunjian-producer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</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</artifactId>
</dependency>
<!-- spring boot web支持:mvc,aop... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.38</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
第四步: 创建entity实体类
package com.sunjian.entity;
public class UserEntity {
private Long id;
private String name;
private Integer age;
public UserEntity(Long id, String name, Integer age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
第五步:创建QueueConfig,一个消息队列,主要作用是把消息队列的名字传进去
package com.sunjian.confg;
import javax.jms.Queue;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @classDesc: 功能描述:(创建一个队列)
*/
@Configuration
public class QueueConfig {
@Value("${queue}")//值就是sunjian
private String queueName;
@Bean
public Queue queue() {//消息队列的名字就是sunjian
return new ActiveMQQueue(queueName);
}
}
第六步:创建Producer,生产者,往消息队列中发送消息,为了演示明显,加入了定时任务
package com.sunjian;
import java.util.UUID;
import javax.jms.Queue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONObject;
import com.sunjian.entity.UserEntity;
/**
* @classDesc: 功能描述:(生产者代码)
*/
@Component//将Producer注入到容器
@EnableScheduling//定时任务的注解
public class Producer {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired//注入
private Queue queue;
private int age = 18;
@Scheduled(fixedDelay = 5000)//每隔5秒钟执行这个方法
public void send() {
age++;
UserEntity userEntity = new UserEntity(System.currentTimeMillis(), UUID.randomUUID().toString(), age);
String json = new JSONObject().toJSONString(userEntity);//将实体类转换成json字符串
System.out.println("json:" + json);
jmsMessagingTemplate.convertAndSend(queue, json);//向指定队列中发送消息
}
}
第七部:创建启动类App
package com.sunjian;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
代码运行完毕:接下来,先安装mq
第八步:下载mq
mq下载地址
为演示方便,我们下载windows版本的mq
解压之后,需要先安装InstallService.bat,然后在运行activemq.bat
在网页中运行mq网址
http://127.0.0.1:8161/admin/ 账号是admin,密码是admin
第九步:mq已经装完,代码也已经写完,测试一下看看,右键执行App
定时任务执行了7条数据,在sunjian当中也执行了7条.mq发送消息成功
关注我的公众号,都是满满的干货!