ActiveMQ-与SpringBoot整合-主题篇

Posted 闲言博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActiveMQ-与SpringBoot整合-主题篇相关的知识,希望对你有一定的参考价值。

1.创建生产者项目

1.1 添加依赖
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--spring boot整合activemq的jar包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
            <version>2.1.5.RELEASE</version>
        </dependency>
    </dependencies>
1.2 配置yml文件
server:
  port: 7777
spring:
  activemq:
    # activemq的broker的url
    broker-url: tcp://127.0.0.1:61616
    # 连接activemq的broker所需的账号和密码
    user: admin
    password: admin
  jms:
    # 目的地是queue还是topic, false(默认) = queue    true =  topic
    pub-sub-domain: true
#  自定义队列名称
mytopic: boot-activemq-topic
1.3 编写生产者启动类
@SpringBootApplication
@EnableScheduling
public class AppProduct 
    public static void main(String[] args) 
        SpringApplication.run(AppProduct.class,args);
    

1.4 编写生产者配置类,将ActiveMQTopic添加到容器中
@Component
@EnableJms
public class ConfigBean 

    @Value("$mytopic")
    private String  topicName ;

    @Bean
    public Topic topic() 
        return new ActiveMQTopic(topicName);
    

1.5 发送消息

这里我用了一个定时任务,定时往主题里发送消息

@Component
public class TopicProduce 

    @Autowired
    private JmsMessagingTemplate  jmsMessagingTemplate ;

    @Autowired
    private Topic  topic ;

    @Scheduled(fixedDelay = 3000)
    public void produceTopic()
        jmsMessagingTemplate.convertAndSend(topic,"主题消息"+ UUID.randomUUID().toString().substring(0,6));
    

注意:生产者生产时,topic不保存消息它是无状态的不落地,假如无人订阅就去生产,那就是一条废消息,所以,一般先启动消费者再启动生产者

2.创建消费者项目

2.1 添加依赖

同上

2.2 配置yml文件

同上(如果需要同时启动生产者和消费者,这里需要修改项目的端口号,否则端口冲突)

2.3 编写消费者启动类
@SpringBootApplication
public class AppConsumer 
    public static void main(String[] args) 
        SpringApplication.run(AppConsumer.class,args);
    

2.4 编写消费者消费方法类
@Component
public class TopicConsumer 
    @JmsListener(destination = "$mytopic")
    public void receive(TextMessage textMessage) throws  Exception
        System.out.println("消费者受到订阅的主题:"+textMessage.getText());
    

2.5 启动消费者工程

2.6 启动生产者工程

2.7 查看后台

有一个消费者,进入了15条消息,消费了15条消息

3.项目结构

以上是关于ActiveMQ-与SpringBoot整合-主题篇的主要内容,如果未能解决你的问题,请参考以下文章

ActiveMQ-与SpringBoot整合-主题篇

SpringBoot整合ActiveMQ开启持久化

Springboot整合activeMQ之Topic,不懂也得懂了吧

ActiveMQ-与Spring整合-主题篇

ActiveMQ-与Spring整合-主题篇

ActiveMQ-与Spring整合-主题篇