消息中间件
https://blog.youkuaiyun.com/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语言底层写好的方法。