python消息中间件activemq_消息中间件ActiveMQ和JMS基础

MQ主要流程

解耦,异步,消峰

其中目的地主要为队列或者主题

队列点对点

消息的生产者

或者

这时消息的生产者名字已经出来

并且入队的数量变成了3

上述完成的也就是这部分

消息的消费者

前四步大同小异

这里需要和消息发送者的类型一致,所以需要强转一下

其中等待接收可以设置为一直等或者设置时长

最后再加上判断,良好的编程习惯

执行一下

出队变成了3,消费连接数变成了1,并且因为设置的receive为一直等,所以消费数量不会变化,除非关闭程序

不过这种方法是阻塞的

=====================

=====================

2通过监听的方式来消费消息(像是安卓中的监听事件)

前5步不变,从while处改变

加上System.in.read是让程序持续运行,不输入即一直运行,输入了然后就关闭,正好给消费时间

不然不写这部分,程序运行速度肯定超过消费速度

===============================

===============================

搞清楚了生产者消费者的基础程序和概念之后下面看一个重点

消费生产的冲突问题---三大消费问题

=================================

=================================

=================================

主题发布订阅-一对多

与队列基本一致,改一改名字和目的地即可

生产者

消费者同理也是如此操作即可

最后再说下MQ中间件的产品很多:kafka,RocketMQ,而学习了activeMQ基本原理相通,

JMS

而MQ基本属于JMS规范( JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。)

而jms常见的问题就是保障消息可靠性保证,

1持久非持久2事务3签收

这就是涉及到消息头中的DeliveryMode

消息头

1JMSDestination 目的地

2JMSDeliveryMode 持久非持久模式

3JMSExpiration 过期时间

4   JMSPriority 优先级

5JMSMessageID 唯一识别编号

消息调用的幂等性就需要这个唯一识别编号

当然最后看了上面的一个一个设置消息头是不是很麻烦,上面只是为了演示方法,还可以通过send统一批处理

消息体

消息属性-更进一步增加识别度

怎样用:

JMS可靠性

1持久设置

这也是前面消息头讲过的

2事务设置(偏生产者)

生产者事务

前面我们都是用的false下面如设置为true看看

为什么false这么方便,自动提交还需要false呢

因为事务的特性:同生共死

所以再写代码时应该是这样用,假设一个生产者挂了,这一事务(加入有十个生产者)就因为都不能执行,这时应让事务回滚重新执行

即:正常给你提交,错误就再给你机会回滚直到生产成功

看看下面伪代码

3签收设置(偏消费者)

前面的情况是非事务,如果按照事务的情况,你设置手动的情况不ACK都不影响了

如一样可以接受

Broker

Broker可以被看成消息转发器。Broker也负责一些控制和管理操作。它能够定位服务端的位置,若发生异常,能够将异常捕获传给Client。Broker需要提供注册服务的接口给Server。如果请求来自其他的Broker,本地的Broker需要转发请求并最终将结果或异常回应给相应的远程Broker。Broker提供的服务和name service非常相像(如DNS、LDAP)。

l 责任:1. 注册服务。2. 提供服务API。3. 转发消息。4. 容错处理。5. 与其他Broker的交互。6。 定位服务。

导入依赖

然后写Broker

相当于ActiveMQ的一个mini版实例

就可以不再调用136而是本机

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,可以尝试使用pymqi和stomp.py这两个库来实现。首先安装这两个库:pip install pymqi stomp.py 然后使用pymqi连接到ActiveMQ,在连接成功后,使用stomp.py订阅消息,可以按照以下代码示例来实现: ```python import stomp import pymqi host = 'localhost' port = '61613' channel = 'SYSTEM.ADMIN.SVRCONN' queue_manager = 'QM' queue_name = 'QUEUE.NAME' class MQListener(stomp.ConnectionListener): def on_message(self, headers, message): print('Received message: {}'.format(message)) def on_error(self, headers, message): print('Error received: {}'.format(message)) conn = stomp.Connection(host_and_ports=[(host, port)]) conn.set_listener('', MQListener()) queue_manager = pymqi.connect(queue_manager, channel, '{}({})'.format(host, port)) queue = pymqi.Queue(queue_manager, queue_name) queue.get() pymqi.disconnect(queue_manager) conn.subscribe(destination='/queue/{}'.format(queue_name), id=1, ack='auto') conn.start() conn.connect() while True: pass ``` 这段代码中,我们首先定义了一个MQListener类,用于接收到消息后打印消息内容。然后创建了一个Connection对象,使用set_listener()方法将MQListener对象加入进去。使用pymqi连接到ActiveMQ,通过Queue.get()方法获取一条消息后,执行pymqi.disconnect()方法退出连接。接着使用stomp.py的subscribe()方法订阅消息,使用start()方法启动连接,然后进入死循环等待消息的到来,当有消息到来时就会进入on_message()方法,处理消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值