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.项目结构
|