IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> ActiveMq高级(传输协议、消息持久化) -> 正文阅读

[网络协议]ActiveMq高级(传输协议、消息持久化)

一、ActiveMq传输协议

官网地址:http://activemq.apache.org/configuring-version-5-transports.html

1、Tcp协议

activemq默认的传输协议是tcp,在activemq.xml的配置文件中,如下
支持以下协议

<transportConnectors>
    <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
2、TCP协议

(1):这是默认的Broker配置,TCP的Client监听端口是61616。

(2):在网络传输数据前,必须要序列化数据,消息是通过一个叫wire protocol的来序列化成字节流。默认情况下,ActiveMQ把wire protocol叫做OpenWire,它的目的是促使网络上的效率和数据快速交互。
(3):TCP连接的URI形式:tcp://hostname:port?key=value&key=value

(4):TCP传输的优点

  • TCP协议传输可靠性高,稳定性强
  • 高效性:字节流方式传递,效率很高
  • 有效性、可用性:应用广泛,支持任何平台
3、NIO协议

(1):NIO协议和TCP协议类似,但NIO更侧重于底层的访问操作。它允许开发人员对同一资源有更多的client调用和服务端有更多的负载。

(2):适合使用NIO协议的场景:

  • 可能有大量的Client去链接到Broker上,一般情况下,大量的Client去链接Broker是被操作系统的线程数所限制的。因此,NIO的实现比TCP需要更少的线程去运行,所以建议使用NIO协议
  • 可能对于Broker有一个很迟钝的网络传输NIO比TCP提供更好的性能

(3):Transport Connector配置示例:
<transportConnector name="nio" uri="nio://0.0.0.0:61616?trace=true"/>

4、NIO协议增强

(1)、上述配置就uri以nio开头,表示这个端口使用以tcp协议为基础的nio网络io模型,但是这样的设置方式,只能使这个端口支持openwire协议

(2)、设置该端口即支持openwire协议,又支持其他协议
<transportConnector name="auto" uri="auto://localhost:5671"/>
需注意,此关键字auto在5.13以后的版本中才有

在这里插入图片描述

二、ActiveMq消息持久化方式

官网:http://activemq.apache.org/persistence

博客:https://blog.csdn.net/qq_36761831/article/details/99841388

ActiveMq消息持久化机制方式:JDBC、KahaDB、AMQ、LevelDB、Replicated LevelDB

1、KahaDB:

(1)、基于日志文件的持久性数据库,是自ActiveMQ5.4以来的默认存储机制,可用于任何场景,提高了性能和恢复能力,它是基于文件的本地数据库存储形式。它已针对快速持久性进行了优化。KahaDB使用较少的文件描述符,并提供比其前身AMQ消息存储更快的恢复。

 <persistenceAdapter>
     <kahaDB directory="${activemq.data}/kahadb"/>
 </persistenceAdapter>

(2)、Kahadb目录:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4FL6fJDR-1630052769595)(https://note.youdao.com/yws/api/personal/file/WEBdc3919fd41154b285baf9ec525e45e69?method=getImage&version=6058&cstk=k-50-Anm)]

db-7.log 主要用来存数据

db.data 包含了持久化的BTree索引,是消息的索引文件

db.redo 用来进行消息恢复

lock 文件表示当前获得Kahadb读写权限的broker

2、JDBC持久化

(1)、配置

	<bean id="activemq-db" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql://127.0.0.1:3306/activemq"/>
		<property name="username" value="root"/>
		<property name="password" value="123456"/>
		<property name="maxActive" value="200"/>
		<property name="poolPreparedStatements" value="true"/>
	</bean>
	
	
	<persistenceAdapter> 
       <jdbcPersistenceAdapter dataSource="#activemq-db" createTablesOnStartup="true" /> 
    </persistenceAdapter>

(2)、添加mysql数据库的驱动jar包到activemq/lib的文件夹下
注意:若使用第三方连接池或是连接器(例如c3p0、druid),应同时将其jar包添加到lib文件夹下

(3)、自动创建的三张表
在这里插入图片描述

***activemq_msgs:***用于存储消息,Queue和Topic都存储在这个表中

***activemq_acks:***用于存储订阅关系,如果是持久化的Topic,订阅者和服务器的订阅关系在这个表保存

***activemq_lock:***在集群环境中才有用,只有一个Broker可以获得消息,用来记录哪个Broker是当前的Master Broker

3、AMQ()

AMQ是一种文件存储形式,它具有写入速度快和容易恢复的特定,消息存储在一个个文件中,文件的默认大小为32M,当一个存储文件中的消息已经全部被消费,那么这个文件将被标识为可删除,在下一个清除阶段这个文件被删除,AMQ适用于ActiveMQ5.3之前的版本。

4、LevelDB(适用ActiveMq5.8及以上版本)

它和KahaDB很相似,也是基于文件的本地数据库存储形式,但是它提供比KahaDB更快的持久性,但它不再使用自定义B-Tree实现来索引预写日志,而是使用基于LevelDB的索引

从ActiveMq5.9 ,LevelDB已经被弃用,不再被推荐使用

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章           查看所有文章
加:2021-08-31 15:49:47  更:2021-08-31 15:52:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:53:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码