SpringBoot整合activeMQ
-
新建maven项目activemq-provider(提供者)
-
pom.xml
-
<dependencies> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.2.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> <version>2.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.2.1.RELEASE</version> </dependency> </dependencies>
-
配置yml和主启动
-
#Springboot启动端口 server: port: 8080 #ActiveMQ配置 spring: activemq: broker-url: tcp://192.168.159.12:61616 #ActiveMQ服务器IP user: admin #ActiveMQ连接用户名 password: admin #ActiveMQ连接密码 jms: #指定连接队列还是主题 pub-sub-domain: false # false = Queue | true = Topic #定义服务上的队列名 #myQueueName: springboot-activemq-queue myqueue: boot-activemq-queue
-
@SpringBootApplication @EnableScheduling //开启定时推送消息 public class Main_Produce { public static void main(String[] args) { SpringApplication.run(Main_Produce.class,args) ; } }
-
新建配置类,配置消息队列
-
@Configuration @EnableJms //开启消息 public class ConfigBean { @Value("${myqueue}") //yml配置文件里面配置的队列名称 private String myQueue; @Bean public ActiveMQQueue queue(){ return new ActiveMQQueue(myQueue); } }
-
-
新建生产者类
-
@Service public class Queue_provider { @Autowired private JmsMessagingTemplate jmsMessagingTemplate; @Autowired private ActiveMQQueue queue; public void produceMsg(){ jmsMessagingTemplate.convertAndSend(queue,"*****"+ UUID.randomUUID().toString().substring(0,6)); } //定时推送消息 @Scheduled(fixedDelay = 3000) public void produceScheduled(){ jmsMessagingTemplate.convertAndSend(queue,"定时投递消息"+ UUID.randomUUID().toString().substring(0,6)); System.out.println("定时任务执行了"); } }
-
-
-
-
新建maven项目activemq-consumer(消费者)
-
pom.xml文件,和生产者一样
-
<dependencies> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.2.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> <version>2.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.2.1.RELEASE</version> </dependency> </dependencies>
-
配置yml和主启动
-
server: port: 8888 spring: activemq: broker-url: tcp://192.168.159.12:61616 user: admin password: admin jms: #指定连接的是队列(Queue)还是主题(Topic) pub-sub-domain: false #false代表队列,true代表主题 #定义连接的队列名 myqueue: boot-activemq-queue
-
主启动
-
@SpringBootApplication public class MainConsumer { public static void main(String[] args) { SpringApplication.run(MainConsumer.class,args); } }
-
-
新建消费者类
-
@Service public class Consumer { @JmsListener(destination = "${myqueue}") //监听模式,只要监听到生产者生产出消息,自动去读取 public void recive(TextMessage textMessage) throws JMSException { System.out.println("消费者收到消息"+textMessage.getText()); } }
-
-
-
-
topic(订阅者)模式
-
新建topic-provide的maven项目
-
pom.xml文件,和上面一致
-
主启动和配置类还有yml
-
//主启动 @SpringBootApplication @EnableScheduling public class TopicMain { public static void main(String[] args) { SpringApplication.run(TopicMain.class,args); } } //配置类 @Configuration @EnableJms public class ConfigBean { @Value("${myqueue}") private String queuetopic; @Bean public ActiveMQTopic getActiveMQ(){ //创建订阅者模式的队列 return new ActiveMQTopic(queuetopic); } }
-
server: port: 9999 spring: activemq: broker-url: tcp://192.168.159.12:61616 user: admin password: admin jms: pub-sub-domain: true #订阅者模式 myqueue: springboot-actemq-topic
-
新建provider
-
@Component public class TopicProvider { @Autowired private JmsMessagingTemplate jmsMessagingTemplate; @Autowired private ActiveMQTopic activeMQTopic; //订阅模式 @Scheduled(fixedDelay = 3000) //定时回调 public void sendMsg(){ jmsMessagingTemplate.convertAndSend(activeMQTopic,"这是订阅者消息"+ UUID.randomUUID().toString().substring(0,6)); System.out.println("任务执行"); } }
-
-
-
创建消费者
-
新建consumer的maven项目
-
pom.xml的内容和上面一样
-
主启动不用修改
-
yml文件
-
server: port: 6789 spring: activemq: broker-url: tcp://192.168.159.12:61616 user: admin password: admin jms: pub-sub-domain: true #订阅者模式 myqueue: springboot-activemq-topic
-
新建consumer类
-
@Service public class TopicConsumer { @JmsListener(destination = "${myqueue}") //设置消息队列监听 public void getMessage(TextMessage textMessage) throws JMSException { System.out.println("受到的消息"+textMessage.getText()); } }
-
以同样的方式在创建一个消费者,只需修改yml文件的端口号
-
-
先启动消费者,然后在启动提供者
-