消息队列,用来处理开发中的高并发问题,通过线程池、多线程高效的处理并发任务。

  首先,需要下载一个ActiveMQ的管理端:我本地的版本是 activemq5.15.8,打开activemq5.15.8\bin\win64\wrapper.exe客户端,可以根据localhost:端口号,访问ActiveMQ的管理界面。默认的用户名、密码都是admin。

SpringBoot 整合 ActiveMq

SpringBoot 整合 ActiveMq

SpringBoot 整合 ActiveMq

SpringBoot 整合 ActiveMq

  (一)pom 文件中添加 ActiveMq 依赖

<dependency>
     <groupId>org.apache.activemq</groupId>
     <artifactId>activemq-core</artifactId>
     <version>5.7.0</version>
</dependency>
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>5.7.0</version>
</dependency>

  (二)创建线程池,通过线程池创建、管理线程,这样有利于线程的使用,避免了每次都要创建、关闭线程,浪费资源。

  需要注意这里需要把当前类、函数添加到 IOC 容器中,后面将会用到。

    1.@Configuration 在项目启动的时候,会加载当前类,构造bean。也可以使用@Component

    2.@Bean("taskExecutor"),定义了当前 bean 的名称,默认不添加名称的话,后面如果调用,则会根据对象的类型进行类型匹配。

package com.common.utils.threadPool;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * 线程:在执行并发任务的时候,为提高效率,所以启用线程,但是需要创建、销毁
 * java 线程池,使用线程池,避免了每次使用都要创建一个线程从而影响了效率。而是在完成任务后,并不被销毁,还可以继续执行其他任务
 * @since 21:28 2019/4/9
 * @author hanyf
 */

@Configuration
public class ThreadPoolConfig {

    @Bean("taskExecutor")
    public ThreadPoolTaskExecutor taskExecutor(){
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        //线程池核心池的大小,默认线程池为0,需要等待任务去创建线程,如线程数量大于了核心池大小,就会将到达的线程放到【缓存队列中】
        taskExecutor.setCorePoolSize(50);
        //设置线程池能创建的最大线程数量
        taskExecutor.setMaxPoolSize(60);
        //线程没有执行任务时保存多长时间后终止
        //默认情况,只有线程数量>coreThreadNum 才会起作用,直到线程数量<coreThreadNum时结束
        taskExecutor.setKeepAliveSeconds(6*60);
        //缓存队列
        taskExecutor.setQueueCapacity(20);
        taskExecutor.setRejectedExecutionHandler(new RejectedExecutionHandler() {
            @Override
            public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
                System.err.println("线程池拒绝策略,正在执行...");
            }
        });
        return taskExecutor;
    }
}
ThreadPoolConfig

相关文章:

  • 2021-10-11
  • 2021-09-02
  • 2021-08-24
猜你喜欢
  • 2021-12-09
  • 2021-08-07
  • 2021-08-11
相关资源
相似解决方案