activemq后台管理 看topic消息_一文讲解SpringBoot整合ActiveMQ,这样学习不香吗?(附代码)

很多项目, 都不是一个系统就做完了. 而是好多个系统, 相互协作来完成功能. 那, 系统与系统之间, 不可能完全独立吧?

如: 在学校所用的管理系统中, 有学生系统, 资产系统, 宿舍系统等等. 当学期结束之后, 是否需要对已经结束的期次进行归档操作. 假如归档功能在学生系统中, 那点击归档之后, 学生是不是还要关心宿舍那边是否已结束, 学生所领资产是否全都归还?

显然, 这并不是一个好的方式, 系统之间的耦合性做的太强了, 很不利于系统扩展, 而且, 一步操作, 可能要等很久很久, 才能完成. 用户可愿意等?

既然同步归档不可能了, 那是否有办法实现异步归档? 异步归档怎么实现呢?

我们其实可以通过消息队列来实现异步归档. 学生这边点击归档后, 发个消息到队列中, 其他系统自行去读取, 然后完成各自系统应该完成的工作.

所以说消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。消息形式支持点对点和订阅-发布。今天呢?我们就讲一下ActiveMQ

ActiveMQ是什么   

 1、ActiveMQ是消息队列技术,为解决高并发问题而生   

 2、ActiveMQ生产者消费者模型(生产者和消费者可以跨平台、跨系统)  

 3、ActiveMQ支持如下两种消息传输方式

    • 点对点模式,生产者生产了一个消息,只能由一个消费者进行消费

    • 发布/订阅模式,生产者生产了一个消息,可以由多个消费者进行消费

一、Linux下ActiveMQ安装

1.下载并解压

7c1add1b676376f476338ed98d886877.png

2.运行

898bbc1cb7b3a509a9789bafee56b916.png

3.进入管理界面

浏览器访问192.168.0.1:8161/admin/,默认用户名和密码为:admin/admin,控制台截图如下:

c785b9ae6bd02d485cce980f04a43f43.png

列表中信息含义如下:

  • Number Of Pending Messages:等待消费的消息 这个是当前未出队列的数量。
  • Number Of Consumers:消费者 这个是消费者端的消费者数量
  • Messages Enqueued:进入队列的消息 进入队列的总数量,包括出队列的。
  • Messages Dequeued:出了队列的消息 可以理解为是消费者消费掉的数量

2、项目结构

cc2f6bb460924a327c8fb04424626068.png

3、引入依赖

               org.springframework.boot            spring-boot-starter-activemq        org.messaginghub            pooled-jms        

3、修改application.properties

#服务端口号server.port=8080server.servlet.context-path=/activemqsb#activemq配置#ActiveMQ通讯地址spring.activemq.broker-url=tcp://localhost:61616#用户名spring.activemq.user=admin#密码spring.activemq.password=admin#是否启用内存模式(就是不安装MQ,项目启动时同时启动一个MQ实例)spring.activemq.in-memory=false#信任所有的包spring.activemq.packages.trust-all=true#是否替换默认的连接池,使用ActiveMQ的连接池需引入的依赖spring.activemq.pool.enabled=false

4、配置activeMQ

@Configuration@EnableJmspublic class ActiveMQConfig {    @Bean    public Queue queue() {        return new ActiveMQQueue("springboot.queue") ;    }    //springboot默认只配置queue类型消息,如果要使用topic类型的消息,则需要配置该bean    @Bean    public JmsListenerContainerFactory jmsTopicListenerContainerFactory(ConnectionFactory connectionFactory){        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();        factory.setConnectionFactory(connectionFactory);        //这里必须设置为true,false则表示是queue类型        factory.setPubSubDomain(true);        return factory;    }    @Bean    public Topic topic() {        return new ActiveMQTopic("springboot.topic") ;    }}

5、创建消费者

@Service//消费者public class Consumer {    //接收queue类型消息    //destination对应配置类中ActiveMQQueue("springboot.queue")设置的名字    @JmsListener(destination="springboot.queue")    public void ListenQueue(String msg){        System.out.println("接收到queue消息:" + msg);    }    //接收topic类型消息    //destination对应配置类中ActiveMQTopic("springboot.topic")设置的名字    //containerFactory对应配置类中注册JmsListenerContainerFactory的bean名称    @JmsListener(destination="springboot.topic", containerFactory = "jmsTopicListenerContainerFactory")    public void ListenTopic(String msg){        System.out.println("接收到topic消息:" + msg);    }}

6、创建生产者

@RestController//生产者public class Producer {        @Autowired    private JmsMessagingTemplate jmsTemplate;    @Autowired    private Queue queue;    @Autowired    private Topic topic;    //发送queue类型消息    @GetMapping("/queue")    public void sendQueueMsg(String msg){        jmsTemplate.convertAndSend(queue, msg);    }    //发送topic类型消息    @GetMapping("/topic")    public void sendTopicMsg(String msg){        jmsTemplate.convertAndSend(topic, msg);    }}

7、启动类

@SpringBootApplication@EnableJms //启动消息队列public class ActivemqsbApplication {    public static void main(String[] args) {        SpringApplication.run(ActivemqsbApplication.class, args);    }}

8、启动程序测试

  • 浏览器中输入http://localhost:8080/activemqsb/queue?msg=hello
  • 控制台:接收到queue消息:hello
  • 浏览器中输入http://localhost:8080/activemqsb/topic?msg=hello
  • 控制台:接收到topic消息:hello

如果单纯的一篇文章不足以满足你的学习欲望,来吧,这是我之前的一些面试文章

每天一套面试题:掌握SpingBoot这些面试题,面试不慌(附答案)

如果这样还满足不了你,依旧没关系,小编网盘还有大把的资料,只要你来,只要我有,来之前麻烦您

1、点赞+评论(勾选“同时转发”)给小编一点动力

2、关注小编。并私信回复关键字【java】(一定要私信哦~点击我的头像就能看到私信按钮了)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值