springboot整合mq发送消息队列

写在前面,mq简称消息队列,本文介绍的是activemq.那mq主要用在什么场景,他的作用又是什么呢?
介绍:mq称为消息中间件,语言表达不如看图.

springboot整合mq发送消息队列_第1张图片
image.png
springboot整合mq发送消息队列_第2张图片
image.png

顾名思义,mq主要还是为了提高服务器响应速度,提高客户体验.举个例子大家就应该明白了。
比如当用户登录某商城后,点击某商品要求发送邮件或者发送短信,此时邮件和短信是有可能失败的,如果同步的话必然会引起客户长时间等待,不利于客户体验(mq是异步).所以mq可以设置一个定时器,每隔一段时间对于发送失败的邮件和短信重新发送。

第一步:新建marven项目。

第二步:在resource当中新建application.yml文件

Image.png

然后在里面输入:

spring:
  activemq:


    broker-url: tcp://127.0.0.1:61616
    user: admin
    password: admin
queue: sunjian
server:
  port: 8081

第三步:在pom当中引入springboot


    4.0.0
    com.sunjian.activemq.producer
    sunjian-producer
    0.0.1-SNAPSHOT
    
         org.springframework.boot
        spring-boot-starter-parent
         1.5.4.RELEASE
    
    
        UTF-8
        UTF-8
         1.8
    
    
         
             org.springframework.boot
             spring-boot-starter
         
         
         
             org.springframework.boot
             spring-boot-starter-web
         
         
             org.springframework.boot
             spring-boot-starter-test
             test
         
         
             org.springframework.boot
             spring-boot-starter-activemq
         
         
         
             com.alibaba
             fastjson
             1.2.38
         
    
    
         
             
                 org.springframework.boot
                 spring-boot-maven-plugin
             
         
    

第四步: 创建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

springboot整合mq发送消息队列_第3张图片
Image.png

mq下载地址
为演示方便,我们下载windows版本的mq
解压之后,需要先安装InstallService.bat,然后在运行activemq.bat

springboot整合mq发送消息队列_第4张图片
Image.png
springboot整合mq发送消息队列_第5张图片
Image.png

在网页中运行mq网址
http://127.0.0.1:8161/admin/ 账号是admin,密码是admin

springboot整合mq发送消息队列_第6张图片
Image.png

第九步:mq已经装完,代码也已经写完,测试一下看看,右键执行App

springboot整合mq发送消息队列_第7张图片
Image.png

定时任务执行了7条数据,在sunjian当中也执行了7条.mq发送消息成功

activemq接收消息请看

关注我的公众号,都是满满的干货!

springboot整合mq发送消息队列_第8张图片
孙坚.gif

你可能感兴趣的:(springboot整合mq发送消息队列)