SpringBoot2.0之整合ActiveMQ(发布订阅模式)详解编程语言

发布订阅模式与前面的点对点模式很类似,简直一毛一样

 

注意:发布订阅模式 先启动消费者

公用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> 

 与上一篇博客类似的:改改就欧克了 猜猜都知道该怎么玩
SpringBoot2.0之整合ActiveMQ(发布订阅模式)详解编程语言

 

 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

 SpringBoot2.0之整合ActiveMQ(发布订阅模式)详解编程语言

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); 
    } 
     
}

 

 先启动消费者 然后启动生产者,多开几个端口玩玩集群~

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/16137.html

(0)
上一篇 2021年7月19日 19:01
下一篇 2021年7月19日 19:01

相关推荐

发表回复

登录后才能评论