2021-04-17 activemq发送数据底层源码原理

消息中间件

https://blog.csdn.net/qq_31635851/article/details/108727583
理解:用于分布式系统的中的数据接收和发送的服务。

ActiveMQ

阿帕奇出品,最常见的消息中间件

jms,java平台上的消息中间件的规范

观察者模式

原理:

将对象(被观察事物)和一堆观察者绑定起来,当对象发生变化时,同时通知所有观察者,获取对象变化的数据。
java说法:对象中存储观察者列表,当调用对象的方法做相关的改变时,同时在方法中,调用对象中另一个方法(通知),循环调用所有观察者中的相关方法,并将数据传送过去。

应用:

广播机制,群发消息
例如:cs一个房间游戏时,多台计算机连接服务器,当一台计算机人物移动时,那么其他计算机上的这个人物也得移动,那么实现方式就是,一台计算机人物移动时发送信息到服务器上,服务器群体通知其他计算机,该人物位置改变。

java实现方式

https://www.runoob.com/design-pattern/observer-pattern.html

两种方式,
1.群体发布(主体占主导地位,主体调用观察者的方法修改数值):对象中调用观察者的方法,传输数值
2.群体通知(观察者占主体地位,观察者调用主体方法将自己添加到主体观察者列表中,主体通知观察者发生主体发生修改,观察者调取主体中的变化数值):对象中调用观察者的方法,不传输数值,由观察者自己从对象中获取。
观察者中存储对象,创建观察者时将对象存储到观察者中,并将观察者添加到对象中(关联对象和观察者),

**观察者(监听模式发展历史)

1.最开始使用while循环监听变化
2.需求的提高,while不满足需求了,主体占主导地位,主体修改监听者属性,达到实现监听的效果
3.发展,监听者占主导地位,主体只需要发送给监听者修改通知,然后监听者从主体获取修改的数据。

activemq发送数据底层源码原理

简单来说,发送数据,生产者的send方法底层调用的是request方法,而request底层调用的是socket的方法,而socket调用的是底层c写的数据发送方法
(注意:创建连接,会话,生产者,都会走下方的发送数据包,因为要确认是否连接正确)
1.到发送方法前,打断点,一个一个方法走下去
在这里插入图片描述
2.(中间的不说了,得走好多方法)走到了这,发现调用了request方法,(注意在这打完断点下次进入,连接,会话,都会在这断点停,判断是否是发送数据的方法,可以看是否走了send方法(send后面的肯定就是想要的走地方了),或看下方的comand是否有发送的数据)
在这里插入图片描述
3,然后再一步一步走下去,发现request下面调用了socket的方法,b就是传输的数据,

在这里插入图片描述
4,对比一下,将数据123,转为byte(ascii)49,50,51,存储,可以在b中看到发送的数据。
在这里插入图片描述
4.这个方法点不进去,到头了,这个方法是调用底层c语言写的方法。
在这里插入图片描述

总结

扒源码,扒完了,一个一个方法走,都不想扒了,走了好几天, 才弄完,主要是底层咋执行的都不清楚,然后来回走了好长时间,但感觉收获满满,以前总不知道java怎么和其他软件通信的,现在明了好多,期望大神们,能多发点底层的原理,然后我就可以沾大神们的光了。

最后,附上一张java通信流程图
简单来说,socket往上(包含socket)是java可以操作的,往下都是调用c语言底层写好的方法。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值