spring boot集成Active MQ 报错Consider revisiting the entries above or defining a bean of type

如何在Windows环境安装和启动Active MQ请看上一篇博文:

https://blog.csdn.net/h_j_c_123/article/details/108454607

首先我们使用idea新建一个spring boot工程,不会新建工程的请看该篇博文:

https://blog.csdn.net/h_j_c_123/article/details/93477170

然后我们开始说明如何继承:

首先添加依赖:



   org.springframework.boot
   spring-boot-starter-activemq
   1.5.0.RELEASE

   org.messaginghub
   pooled-jms

有的博客还会说连接池使用下面这个依赖:



   
   
   

但是经过尝试这个依赖会报错:

***************************
APPLICATION FAILED TO START
***************************

Description:

Field jmsMessagingTemplate in com.dream.controller.ProviderController 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


Action:

Consider revisiting the entries above or defining a bean of type 'org.springframework.jms.core.JmsMessagingTemplate' in your configuration.

报这个错的原因说是JmsMessagingTemplate无法注入,后来百度百科了一下说是spring boot版本的问题。

然后我们先在启动类上加上@EnableJms允许启动MQ

@SpringBootApplication
// 允许启动ActiveMQ
@EnableJms
public class BootMqApplication {

   public static void main(String[] args) {
      SpringApplication.run(BootMqApplication.class, args);
   }

}

 

然后就可以创建生产者:

点对点的生产者消息队列:

首先配置文件(点对点和发布订阅模式写在一起了):

server.port=8088
#61616是程序连接activemq的通讯地址
spring.activemq.broker-url=tcp://127.0.0.1:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.pool.enabled=true
spring.activemq.pool.max-connections=10
spring.activemq.pool.idle-timeout=30000
spring.activemq.in-memory=false
#如果是点对点(queue),那么此处默认应该是false,如果发布订阅,那么一定设置为true
spring.jms.pub-sub-domain=true

配置消息队列:

@Configuration
public class BeanConfig {
    //    定义存放消息的队列 点对点模式
    @Bean
    public Queue queue() {
        return new ActiveMQQueue("active.queue");
    }
}

新建生产者:ProviderController

注入消息队列:

//    注入存放消息的队列
@Autowired
private Queue queue;
//    注入spring boot封装的工具
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
// 发送消息队列   
 @RequestMapping(value = "/sendQueue")
    public void sendQueue(String name) {
//        方法一:添加消息到消息队列
        jmsMessagingTemplate.convertAndSend(queue, name);
//        方法二:这种方式不需要手动创建queue,系统会自行创建名为test的队列
//        jmsMessagingTemplate.convertAndSend("test", name);
    }

然后我们来看消费者:

@Component
public class ConsumerService {
    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    // 使用JmsListener配置消费者监听的队列,其中name是接收到的消息
    @JmsListener(destination = "active.queue")
    // SendTo 会将此方法返回的数据, 写入到 OutQueue 中去.
    @SendTo(value = "SQueue")
    public String handleMessage(String name) {
        System.out.println("成功接受Name" + name);
        return "成功接受Name" + name;
    }
}

至此,我们的一个基础的消息队列完成,然后我们来看一下点对点的消息模式效果:

发送数据:

spring boot集成Active MQ 报错Consider revisiting the entries above or defining a bean of type_第1张图片

结果截图:

spring boot集成Active MQ 报错Consider revisiting the entries above or defining a bean of type_第2张图片

点对点的时候记得把

#spring.jms.pub-sub-domain=true注释掉或者改成false

 

下面来看发布和订阅模式:

配置消息队列-订阅模式:

@Configuration
public class BeanConfig {
    // 发布订阅模式
    @Bean
    public Topic topic() {
        return new ActiveMQTopic("active.topic");
    }
}

spring boot集成Active MQ 报错Consider revisiting the entries above or defining a bean of type_第3张图片

 

    //    订阅发布模式
    @RequestMapping(value = "/sendTopic")
    public String sendTopic(String message) {
//        指定消息发送的目的地和内容
        jmsMessagingTemplate.convertAndSend(topic, message);
        return "消息发送成功!message=" + message;
    }

spring boot集成Active MQ 报错Consider revisiting the entries above or defining a bean of type_第4张图片

新建消费者:

//    监听和接收主题消息1
    @JmsListener(destination = "active.topic")
    public void readActiveTopic1(String message) {
        System.out.println("Customer1接受到:" + message);
    }


    //    监听和接收主题消息2
    @JmsListener(destination = "active.topic")
    public void readActiveTopic2(String message) {
        System.out.println("Customer2接受到:" + message);
    }

spring boot集成Active MQ 报错Consider revisiting the entries above or defining a bean of type_第5张图片

下面来验证数据:

spring boot集成Active MQ 报错Consider revisiting the entries above or defining a bean of type_第6张图片

spring boot集成Active MQ 报错Consider revisiting the entries above or defining a bean of type_第7张图片

这样一个简单的spring boot和Active MQ的集成就完成了。

码云地址:https://gitee.com/hjc2/springboot.git

你可能感兴趣的:(消息队列,Spring,Boot,Java,spring,boot,消息队列,Active,MQ)