专栏首页Java深度编程SpringBoot 整合 gradle 集成ActiveMQ

SpringBoot 整合 gradle 集成ActiveMQ

开发环境:

1.springBoot 2.3.1.RELEASE

2.gradle 5.6

3.activeMQ 2.3.1.RELEASE

第一步:首先在build.gradle中导入activeMQ的依赖

buildscript {
    dependencies {
        implementation group: 'org.springframework.boot', name: 'spring-boot-starter-activemq', version: '2.3.1.RELEASE'
    }
}

坐标可以在maven仓库中寻找地址:

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-activemq/2.3.1.RELEASE

第二步:在springBoot配置文件中配置activeMQ

 activemq:
    broker-url: tcp://localhost:61616
    user: admin
    password: admin
    pool:
      enabled: false
      max-connections: 50
    #默认包名安全(支持序列化与反序列化)
    packages:
      trust-all: true
  #支持topic订阅模式
  jms:
    pub-sub-domain: true

第三部:初始化消息队列

package com.es;

import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.jms.Queue;

@Configuration
public class ActiveMqConfig {

    /**
     * @Author GONGWENXUE
     * @Description //TODO 消息队列初始化配置 - 创建消息队列
     * @version: v1.8.0
     * @Date 13:55 2020/7/31
     * @Param
     * @return
     **/
    @Bean
    public Queue queue() {
        return new ActiveMQQueue("test.queue");
    }

}

第四部:创建消息发布者

package com.es.basedata.mq;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;

import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.Topic;



/**
 * @Author GONGWENXUE
 * @Description //TODO 定义生产者
 * @version: v1.8.0
 * @Date 17:04 2020/7/31
 * @Param
 * @return
 **/
@Service
public class MqProducer {


    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;


    /**
     * @Author GONGWENXUE
     * @Description //TODO 发布者发送自定义消息
     * @version: v1.8.0
     * @Date 16:58 2020/7/31
     * @Param queueName 队列名称
     * @Param message 消息内容
     * @return
     **/
    public void sendMessage(String queueName, String message) {
        //发送队列消息
        this.jmsMessagingTemplate.convertAndSend(queueName, message);
    }

}

第五步:创建消费者

package com.es.basedata.mq;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

/**
 * 定义消费者
 * @Description
 * @author Qz
 * @date 2018年3月27日
 *
 */
@Component
public class MqConsumer {

    @JmsListener(destination = "test.queue")
    public void receiveQueue(String text) {
        System.out.println("消费者:来源于生产者对列的消息:"+text);
    }

}

第六步:开发接口测试

package com.es.basedata.api;

import com.es.basedata.mq.MqProducer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * @className: TestMq
 * @Description: TODO 测试MQ
 * @version: v1.8.0
 * @author: GONGWENXUE
 * @date: 2020/7/31 17:05
 */
@RestController
public class TestMq {

    @Autowired
    private MqProducer mqProducer;

    @GetMapping("/test-mq/{message}")
    public String test(@PathVariable("message") String message){

        mqProducer.sendMessage("test.queue", message);
        System.out.println("浏览器上测试mq成功");
        return "浏览器上测试mq成功";
    }
}

在浏览器上输入 http://localhost:8085/test-mq/浏览器上测试MQ

得到结果:

后台打印:

到此即大功告成!!!

重点:可能遇到的坑

1.找不到JmsMessagingTemplate,无法匹配MessagingTemplateConfiguration

报错如下:

Field jmsMessagingTemplate in com.es.basedata.mq.MqProducer required a bean of type 'org.springframework.jms.core.JmsMessagingTemplate' that could not be found.

The injection point has the following annotations:
	- @org.springframework.beans.factory.annotation.Autowired(required=true)

The following candidates were found but could not be injected:
	- Bean method 'jmsMessagingTemplate' in 'JmsAutoConfiguration.MessagingTemplateConfiguration' not loaded because Ancestor org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration did not match

本文分享自微信公众号 - Java深度编程(JavaDeep),作者:龚文学

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java 泛型

    如果我们只写一个排序方法,就能够对整型数组、字符串数组甚至支持排序的任何类型的数组进行排序,这该多好啊。

    Java深度编程
  • 宏观分析法 — 教你如何实现复杂sql的编写,复杂sql巧妙剥离,不看血亏

    我不知道世上有多少人提出了宏观分析法的概念,而我今天所讲解的完全是出于自我思考总结的理论。 什么是宏观分析法? 我是这么定义它...

    Java深度编程
  • 算法与编程之 -- IO流

    编写一个程序,将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt文件中,a.txt 文件中的单词用回车符分隔,b.txt 文件中用...

    Java深度编程
  • springCloud Eureca服务提供者Provider的项目

    服务提供者的项目: 本例子是把前面springboot的mybatis例子,几乎不变的拿过来就可以运行了。 package com; import java...

    马克java社区
  • @EnableDiscoveryClient和@EnableEurekaClient的区别?

    @EnableDiscoveryClient和@EnableEurekaClient的区别?在前面的服务提供者的例子中我们是用@EnableEurekaClie...

    马克java社区
  • SpringCloud gateway跨域配置

    天涯泪小武
  • 10分钟搞定 SpringBoot 如何优雅读取配置文件?

    很多时候我们需要将一些常用的配置信息比如阿里云 oss 配置、发送短信的相关信息配置等等放到配置文件中。

    Guide哥
  • SpringBoot开发案例之整合mail队列进阶篇

    上一篇文章,我们为了解决实际场景中遇到的问题,使得其更像一个安全高效的邮件服务平台,我们引入了LinkedBlockingQueue队列对邮件发送进行流量削锋、...

    小柒2012
  • SpringBoot开发案例之整合mail队列进阶篇

    前情提要 上一篇文章,我们为了解决实际场景中遇到的问题,使得其更像一个安全高效的邮件服务平台,我们引入了LinkedBlockingQueue队列对邮件发送进行...

    小柒2012
  • SpringBoot开发案例之整合mail队列进阶篇

    上一篇文章,我们为了解决实际场景中遇到的问题,使得其更像一个安全高效的邮件服务平台,我们引入了LinkedBlockingQueue队列对邮件发送进行流量削锋、...

    小柒2012

扫码关注云+社区

领取腾讯云代金券