springboot整合mq发送消息队列

简介: 写在前面,mq简称消息队列,本文介绍的是activemq.那mq主要用在什么场景,他的作用又是什么呢?介绍:mq称为消息中间件,语言表达不如看图.image.pngimage.png顾名思义,mq主要还是为了提高服务器响应速度,提高客户体验.举个例子大家就应该明白了。

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

image.png
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

<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

Image.png

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

Image.png
Image.png

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

Image.png

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

Image.png

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

activemq接收消息请看

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

孙坚.gif
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
1天前
|
消息中间件 存储 弹性计算
云消息队列RabbitMQ实践
云消息队列RabbitMQ实践
|
3天前
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
25 4
|
7天前
|
消息中间件 存储 监控
RabbitMQ 队列之战:Classic 和 Quorum 的性能洞察
RabbitMQ 是一个功能强大的消息代理,用于分布式应用程序间的通信。它通过队列临时存储消息,支持异步通信和解耦。经典队列适合高吞吐量和低延迟场景,而仲裁队列则提供高可用性和容错能力,适用于关键任务系统。选择哪种队列取决于性能、持久性和容错性的需求。
51 6
|
7天前
|
消息中间件 存储 监控
解决方案 | 云消息队列RabbitMQ实践
在实际业务中,网站因消息堆积和高流量脉冲导致系统故障。为解决这些问题,云消息队列 RabbitMQ 版提供高性能的消息处理和海量消息堆积能力,确保系统在流量高峰时仍能稳定运行。迁移前需进行技术能力和成本效益评估,包括功能、性能、限制值及费用等方面。迁移步骤包括元数据迁移、创建用户、网络打通和数据迁移。
41 4
|
1月前
|
消息中间件 运维 监控
云消息队列RabbitMQ实践解决方案评测报告
本报告旨在对《云消息队列RabbitMQ实践》解决方案进行综合评测。通过对该方案的原理理解、部署体验、设计验证以及实际应用价值等方面进行全面分析,为用户提供详尽的反馈与建议。
60 16
|
1月前
|
消息中间件 弹性计算 运维
阿里云云消息队列RabbitMQ实践解决方案评测报告
阿里云云消息队列RabbitMQ实践解决方案评测报告
56 9
|
26天前
|
消息中间件 监控 数据处理
解决方案 | 云消息队列RabbitMQ实践
解决方案 | 云消息队列RabbitMQ实践
41 1
|
27天前
|
消息中间件 弹性计算 运维
云消息队列RabbitMQ实践
本评测报告详细分析了阿里云云消息队列 RabbitMQ 版的实践原理、部署体验及核心优势。报告认为其在解决消息积压、脑裂难题及弹性伸缩方面表现优秀,但建议进一步细化架构优化策略和技术细节描述。部署文档详尽,对初学者友好,但仍需加强网络配置和版本兼容性说明。实际部署展示了其高可用性和成本优化能力,适用于高并发消息处理和分布式系统数据同步。为进一步提升方案,建议增加安全性配置指导、性能调优建议及监控告警系统设置。
|
15天前
|
消息中间件 监控 测试技术
云消息队列RabbitMQ实践 - 评测
根据反馈,对本解决方案的实践原理已有一定理解,描述整体清晰但需在消息队列配置与使用上增加更多示例和说明以助理解。部署体验中获得了一定的引导和文档支持,尽管文档仍有待完善;期间出现的配置文件错误及依赖库缺失等问题已通过查阅资料解决。设计验证展示了云消息队列RabbitMQ的核心优势,包括高可用性和灵活性,未来可通过增加自动化测试来提高系统稳定性。实践后,用户对方案解决问题的能力及适用场景有了明确认识,认为其具有实际生产价值,不过仍需在性能优化、安全性增强及监控功能上进行改进以适应高并发和大数据量环境。
33 0
|
1月前
|
消息中间件 JSON Java

相关产品

  • 云消息队列 MQ