發布訂閱模式與前面的點對點模式很類似,簡直一毛一樣
注意:發布訂閱模式 先啟動消費者
公用pom:
<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>com.toov5</groupId>
<artifactId>springboot-topic-producer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<!-- 管理依賴 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 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>
</dependencies>
<!-- 注意: 這里必須要添加, 否者各種依賴有問題 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
與上一篇博客類似的:改改就歐克了 猜猜都知道該怎么玩
yml:
spring:
activemq:
broker-url: tcp://192.168.91.6:61616
user: admin
password: admin
my_topic: springboot-topic-toov5
server:
port: 8081
config
package com.toov5.config; import javax.jms.Topic; import org.apache.activemq.command.ActiveMQTopic; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @Component public class ConfigQueue { @Value("${my_topic}") private String myTopic; //首先將隊列注入到SpringBoot容器中去 @Bean public Topic queue() { return new ActiveMQTopic(myTopic); } }
producer
package com.toov5.topicProducer; import javax.jms.Topic; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsMessagingTemplate; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class TopicProducer { @Autowired private JmsMessagingTemplate jmsMessagingTemplate; //把隊列注入進來 @Autowired //此注解默認是以類型找 在配置文件中 已經注入的 @Bean private Topic topic; //每隔5s時間向隊列發送消息 @Scheduled(fixedDelay=5000) //每間隔2s向隊列發送消息 public void send() { String msgString = System.currentTimeMillis()+" "; jmsMessagingTemplate.convertAndSend(topic,msgString); System.out.println("發布訂閱通訊,msg"+msgString); } }
創建producer maven
SpringBoot 默認開啟點對點的!!!! 訂閱模式需要手動!!!!!
yml中:
#### 開啟發布訂閱
jms:
pub-sub-domain: true

yml:
spring:
activemq:
broker-url: tcp://192.168.91.6:61616
user: admin
password: admin
my_queue: springboot-queue-toov5
server:
port: 8080
consumer
package com.toov5.activemqConsumer; import org.springframework.jms.annotation.JmsListener; import org.springframework.stereotype.Component; @Component public class P2PConsumer { @JmsListener(destination= "${my_queue}") //用這個注解去監聽 監聽的隊列 public void receiver(String msg) { System.out.println("消費者成功獲取到生產者的消息,msg"+msg); } }
啟動類
package com.toov5.activemqConsumer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class AppConsumer { public static void main(String[] args) { SpringApplication.run(AppConsumer.class, args); } }
先啟動消費者 然后啟動生產者,多開幾個端口玩玩集群~
