学习activemq使用中,使用springboot 2.3 整合activemq使用,控制台能够正常输出,但是activemq服务器中查看消息为空。
控制台显示
但是activemq服务器的queues为空
原因:application.yml配置文件出现错误,spring没有与server对齐
修改后
修改后,activemq服务器中收到消息。
下面为全部文件
1、pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>boot_activemq</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
</parent>
<properties>
<project.build.encoding>UTF-8</project.build.encoding>
<maven.compiler.source>14</maven.compiler.source>
<maven.compiler.target>14</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot Activemq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2、 application.yml
server:
port: 7777
spring:
activemq:
broker-url: tcp://localhost:61616
user: admin
password: admin
jms:
pub-sub-domain: false
my_queue: boot-active-queue
#!!!!!!注意间隔错误!!!!
#能够运行但是activemq收不到消息
3、ConfigBean.class
package active.config;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.stereotype.Component;
import javax.jms.Queue;
@EnableJms
@Component
public class ConfigBean {
@Value("${my_queue}")
private String myQueue;
@Bean
public Queue queue()
{
return new ActiveMQQueue(myQueue);
}
}
4、生产者类
package active.produce;
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 javax.jms.Queue;
import java.util.UUID;
@Component
public class boot_activemq_produce{
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Queue queue;
public void productMessage()
{
jmsMessagingTemplate.convertAndSend(queue,"*****"+ UUID.randomUUID().toString());
}
//每隔5s时间向队列发送消息
@Scheduled(fixedDelay=5000) //每间隔2s向队列发送消息
public void send() {
String msgString = System.currentTimeMillis()+" ";
jmsMessagingTemplate.convertAndSend(queue,msgString);
System.out.println("点对点通讯,msg"+msgString);
}
}
5、启动类
package active;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class MainApp_Produce {
public static void main(String[] args) {
SpringApplication.run(MainApp_Produce.class,args);
}
}
6、测试类
package ActiveMQ;
import active.MainApp_Produce;
import active.produce.boot_activemq_produce;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import javax.annotation.Resource;
@SpringBootTest(classes = MainApp_Produce.class) //对那个类进行测试
@RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试
@WebAppConfiguration //以webapp的形式
public class testActiveMQ {
@Autowired //javax//autowired是spring的
private boot_activemq_produce produce;
@Test
public void test_send()throws Exception{
produce.productMessage();
}
}