华为云用户手册
-
方法列表 返回类型 方法和说明 void produceWithDirectExchange(String routingKey, String props, String message) 用direct交换器生产消息,把消息路由到bindingKey与routingKey完全匹配的Queue中。 void produceWithTopicExchange(String bindingKey, String routingKey, String props, String message) 用topic交换器生产消息,把消息路由到bindingKey与routingKey模糊匹配的Queue中。 void produceWithFanoutExchange(String props, String message) 用fanout交换器生产消息,把所有发送到该Exchange的消息路由到所有与它绑定的Queue中。
-
方法详情 public void produceWithDirectExchange(String routingKey, String props, String message) 用direct交换器生产消息,把消息路由到bindingKey与routingKey完全匹配的Queue中。 输入参数 routingKey:消息路由键 props:消息持久化设置,非必填 message:消息内容 public void produceWithTopicExchange(String bindingKey, String routingKey, String props, String message) 用topic交换器生产消息,把消息路由到bindingKey与routingKey模糊匹配的Queue中。 输入参数 bindingKey:队列绑定键 routingKey:消息路由键 props:消息持久化设置,非必填 message:消息内容 produceWithFanoutExchange(String props, String message) 用fanout交换器生产消息,把所有发送到该Exchange的消息路由到所有与它绑定的Queue中。 输入参数 props:消息持久化设置,非必填 message:消息内容
-
方法列表 返回类型 方法和说明 static java.lang.String decrypt(java.lang.String encryptText, java.lang.String secretKey) 使用密钥对密文进行AES解密。 static java.lang.String encrypt(java.lang.String plainText, java.lang.String secretKey) 使用密钥对明文进行AES加密。 static java.lang.String decrypt(java.lang.String encryptText, java.lang.String secretKey, java.lang.String initialVector, AesUtils.KEYLENGTH length, AesUtils.MODE mode, AesUtils.PAD pad) 使用指定模式和长度的密钥对密文进行AES解密。 static java.lang.String encrypt(java.lang.String plainText, java.lang.String secretKey, java.lang.String initialVector, AesUtils.KEYLENGTH length, AesUtils.MODE mode, AesUtils.PAD pad) 使用指定模式和长度的密钥对明文进行AES加密。
-
使用示例 用direct交换器生产消息,把消息路由到bindingKey与routingKey完全匹配的Queue中。 importClass(com.roma.apic.livedata.client.v1.RabbitMqProducer);importClass(com.roma.apic.livedata.config.v1.RabbitMqConfig);importClass(com.roma.apic.livedata.config.v1.QueueConfig);importClass(com.roma.apic.livedata.config.v1.ExchangeConfig);importClass(com.roma.apic.livedata.config.v1.ConnectionConfig); function execute(data) { var connectionConfig = new ConnectionConfig("10.10.10.10", 5672, "admin", "123456"); var queueConfig = new QueueConfig("directQueue", false, false, false, null); var exchangeConfig = new ExchangeConfig("directExchange", "direct", true, false, false, null); var config = new RabbitMqConfig(connectionConfig, queueConfig, exchangeConfig); var producer = new RabbitMqProducer(config); producer.produceWithDirectExchange("direct.exchange", "PERSISTENT_TEXT_PLAIN", "direct exchange message"); return "produce successful.";} 用topic交换器生产消息,把消息路由到bindingKey与routingKey模糊匹配的Queue中。 importClass(com.roma.apic.livedata.client.v1.RabbitMqProducer);importClass(com.roma.apic.livedata.config.v1.RabbitMqConfig);importClass(com.roma.apic.livedata.config.v1.QueueConfig);importClass(com.roma.apic.livedata.config.v1.ExchangeConfig);importClass(com.roma.apic.livedata.config.v1.ConnectionConfig); function execute(data) { var connectionConfig = new ConnectionConfig("10.10.10.10", 5672, "admin", "123456"); var queueConfig = new QueueConfig(“topicQueue”, false, false, false, null); var exchangeConfig = new ExchangeConfig("topicExchange", "topic", true, false, false, null); var config = new RabbitMqConfig(connectionConfig, queueConfig, exchangeConfig); var producer = new RabbitMqProducer(config); producer.produceWithTopicExchange("topic.#", “topic.A”, null, “message”); return "produce successful.";} 用fanout交换器生产消息,把所有发送到该Exchange的消息路由到所有与它绑定的Queue中。 importClass(com.roma.apic.livedata.client.v1.RabbitMqProducer);importClass(com.roma.apic.livedata.config.v1.RabbitMqConfig);importClass(com.roma.apic.livedata.config.v1.QueueConfig);importClass(com.roma.apic.livedata.config.v1.ExchangeConfig);importClass(com.roma.apic.livedata.config.v1.ConnectionConfig); function execute(data) { var connectionConfig = new ConnectionConfig("10.10.10.10", 5672, "admin", "123456"); var queueConfig = new QueueConfig(“fanoutQueue”, false, false, false, null); var exchangeConfig = new ExchangeConfig(“fanoutExchange”, "fanout", true, false, null); var config = new RabbitMqConfig(connectionConfig, queueConfig, exchangeConfig); var producer = new RabbitMqProducer(config); producer.produceWithFanoutExchange( null, “message”); return "produce successfull"}
-
方法详情 public static java.lang.String decrypt(java.lang.String encryptText, java.lang.String secretKey) 使用密钥对密文进行AES解密 输入参数 encryptText:待解密的密文,长度不超过8192 secretKey:密钥 返回信息 返回解密后的数据 public static java.lang.String encrypt(java.lang.String plainText, java.lang.String secretKey) 使用密钥对明文进行AES加密 输入参数 plainText:待加密的明文,长度不超过4096 secretKey:密钥 返回信息 返回加密后的数据 public static java.lang.String decrypt(java.lang.String encryptText, java.lang.String secretKey, java.lang.String initialVector, AesUtils.KEYLENGTH length, AesUtils.MODE mode, AesUtils.PAD pad) 使用指定模式和长度的密钥对密文进行AES解密 输入参数 encryptText:待解密的密文,长度不超过8192 secretKey:密钥 initialVector:初始向量 length:密钥的长度,取值范围:AesUtils.KEYLENGTH.KL_0、AesUtils.KEYLENGTH.KL_128、AesUtils.KEYLENGTH.KL_192、AesUtils.KEYLENGTH.KL_256 mode:工作模式,取值范围:AesUtils.MODE.GCM、AesUtils.MODE.CTR pad:填充模式,取值范围:AesUtils.PAD.PK CS 5PADDING,AesUtils.PAD.NOPADDING 返回信息 返回解密后的数据 public static java.lang.String encrypt(java.lang.String plainText, java.lang.String secretKey, java.lang.String initialVector, AesUtils.KEYLENGTH length, AesUtils.MODE mode, AesUtils.PAD pad) 使用指定模式和长度的密钥对明文进行AES加密 输入参数 plainText:待加密的明文,长度不超过4096 secretKey:密钥 initialVector:初始向量 length:密钥的长度,取值范围:AesUtils.KEYLENGTH.KL_0、AesUtils.KEYLENGTH.KL_128、AesUtils.KEYLENGTH.KL_192、AesUtils.KEYLENGTH.KL_256 mode:工作模式,取值范围:AesUtils.MODE.GCM、AesUtils.MODE.CTR pad:填充模式,取值范围:AesUtils.PAD.PKCS5PADDING,AesUtils.PAD.NOPADDING 返回信息 返回加密后的数据
-
请求消息 请求参数 参数 类型 必选 说明 messages Array 是 消息列表,数组大小不能超过10,且不能为空数组。 表2 messages参数 参数 类型 必选 说明 content Object 是 消息内容。 id String 是 消息序号,序列号不能重复。 请求示例 { "messages": [ { "content": "hello roma-1", "id": "1" }, { "content": "hello roma-2", "id": "2" }, { "content": "hello roma-3", "id": "3" } ]}
-
生成AK、SK 如果已生成过AK/SK,则可跳过此步骤,找到原来已下载的AK/SK文件,文件名一般为:credentials.csv。 如下图所示,文件包含了租户名(User Name),AK(Access Key Id),SK(Secret Access Key)。 图1 credential.csv文件内容 AK/SK生成步骤: 注册并登录管理控制台。 单击右上角的用户名,在下拉列表中单击“我的凭证”。 单击“访问密钥”。 单击“新增访问密钥”,进入“新增访问密钥”页面。 输入登录密码和验证码,单击“确定”,下载密钥,请妥善保管。 图2 访问密钥获取页面示意
-
响应消息 响应参数 参数 类型 说明 state String 结果状态。成功为success,失败为fail。 id String 消息序号。 响应示例 [ { "state": "success", "id": "1" }, { "state": "success", "id": "2" }, { "state": "success", "id": "3" }]
-
客户端参数配置建议 Kafka客户端的配置参数很多,以下提供Producer和Consumer几个常用参数配置。 表1 Producer参数 参数 默认值 推荐值 说明 acks 1 高可靠:all 高吞吐:1 收到Server端确认信号个数,表示procuder需要收到多少个这样的确认信号,算消息发送成功。acks参数代表了数据备份的可用性。常用选项: acks=0:表示producer不需要等待任何确认收到的信息,副本将立即加到socket buffer并认为已经发送。没有任何保障可以保证此种情况下server已经成功接收数据,同时重试配置不会发生作用(因为客户端不知道是否失败),回馈的offset会总是设置为-1。 acks=1:这意味着至少要等待leader已经成功将数据写入本地log,但是并没有等待所有follower是否成功写入。如果follower没有成功备份数据,而此时leader又无法提供服务,则消息会丢失。 acks=all:这意味着leader需要等待所有备份都成功写入日志,只要任何一个备份存活,数据都不会丢失。 retries 0 结合实际业务调整 客户端发送消息的重试次数。值大于0时,这些数据发送失败后,客户端会重新发送。 注意,这些重试与客户端接收到发送错误时的重试没有什么不同。允许重试将潜在的改变数据的顺序,如果这两个消息记录都是发送到同一个partition,则第一个消息失败第二个发送成功,则第二条消息会比第一条消息出现要早。 request.timeout.ms 30000 结合实际业务调整 设置一个请求最大等待时间,超过这个时间则会抛Timeout异常。 超时时间如果设置大一些,如120000(120秒),高并发的场景中,能减少发送失败的情况。 block.on.buffer.full TRUE TRUE TRUE表示当内存用尽时,停止接收新消息记录或者抛出错误。 默认情况下,这个设置为TRUE。然而某些阻塞可能不值得期待,因此立即抛出错误更好。如果设置为false,则producer抛出一个异常错误:BufferExhaustedException batch.size 16384 262144 默认的批量处理消息字节数上限。producer将试图批处理消息记录,以减少请求次数。这将改善client与server之间的性能。不会试图处理大于这个字节数的消息字节数。 发送到brokers的请求将包含多个批量处理,其中会包含对每个partition的一个请求。 较小的批量处理数值比较少用,并且可能降低吞吐量(0则会仅用批量处理)。较大的批量处理数值将会浪费更多内存空间,这样就需要分配特定批量处理数值的内存大小。 buffer.memory 33554432 67108864 producer可以用来缓存数据的内存大小。如果数据产生速度大于向broker发送的速度,producer会阻塞或者抛出异常,以“block.on.buffer.full”来表明。 这项设置将和producer能够使用的总内存相关,但并不是一个硬性的限制,因为不是producer使用的所有内存都是用于缓存。一些额外的内存会用于压缩(如果引入压缩机制),同样还有一些用于维护请求。 max.request.size 1048576 5242880 生产者给服务端单次发送的最大消息字节数,该参数影响单次生产的消息记录数量。 表2 Consumer参数 参数 默认值 推荐值 说明 auto.commit.enable TRUE FALSE 如果为TRUE,consumer所fetch的消息的offset将会自动的同步到zookeeper。这项提交的offset将在进程无法提供服务时,由新的consumer使用。 约束: 设置为FALSE后,需要先成功消费再提交,这样可以避免消息丢失。 auto.offset.reset latest earliest 没有初始化offset或者offset被删除时,可以设置以下值: earliest:自动复位offset为最早 latest:自动复位offset为最新 none:如果没有发现offset则向消费者抛出异常 anything else:向消费者抛出异常。 connections.max.idle.ms 600000 30000 空连接的超时时间,设置为30000可以在网络异常场景下减少请求卡顿的时间。 父主题: 开发说明
-
场景说明 ROMA Connect的服务集成主要涉及以下几个开发场景: API调用认证开发:业务系统在调用服务集成APIC开放的API时,若API的认证方式为APP认证或 IAM 认证,则需要在业务系统侧进行调用认证的开发,为API请求添加认证信息。 APP认证(签名认证):调用侧集成ROMA Connect提供的SDK,对API请求进行签名处理。 IAM认证(Token认证):调用侧先获取云服务平台的认证Token,然后把认证Token携带到API请求中。 IAM认证(AK/SK认证):调用侧集成ROMA Connect提供的SDK,对API请求进行签名处理。 自定义后端开发:用户在使用服务集成APIC的自定义后端创建函数后端和数据后端时,涉及函数脚本或数据库执行语句的编写开发。 函数后端:创建函数后端时需要编写函数脚本,进行函数功能开发,ROMA Connect提供了部分Java类函数供用户直接使用。 数据后端:创建数据后端时需要编写执行语句,用于对数据源进行操作。 后端服务签名校验开发:若API在ROMA Connect上绑定了签名密钥,则ROMA Connect向该API的后端服务发送请求时会携带相应的签名信息。该API的后端服务需要集成ROMA Connect提供的SDK,并对请求中的签名信息进行校验。
-
调用API示例 使用JavaScript SDK生成curl命令。 解压SDK,在浏览器中打开demo.html,页面如下图所示。 输入API所授权凭据的Key和Secret,并指定方法名、请求url,可参考获取API的调用信息获取。例如: // Directly writing AK/SK in code is risky. For security, encrypt your AK/SK and store them in the configuration file or environment variables. // In this example, the AK/SK are stored in environment variables for identity authentication. Before running this example, set environment variables HUAWEICLOUD_SDK_AK and HUAWEICLOUD_SDK_SK. Key=4f5f626b-073f-402f-a1e0-e52171c6100cSecret=******Method=POSTUrl=https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/app1 输入json格式的Query和Headers,填入Body。 单击“Send request”,生成curl命令。将curl命令复制到命令行,访问API。 //若使用系统分配的子 域名 访问https请求的API时,需要忽略证书校验,在-d后添加“ -k”$ curl -X POST "https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/app1" -H "X-Sdk-Date: 20180530T115847Z" -H "Authorization: SDK-HMAC-SHA256 Access=071fe245-9cf6-4d75-822d-c29945a1e06a, SignedHeaders=host;x-sdk-date, Signature=9e5314bd156d517******dd3e5765fdde4" -d ""Congratulations, sdk demo is running SDK生成的curl命令不符合Window下cmd终端格式,请在git bash下执行生成的curl命令。
-
可选参数的使用 数据API中使用中括号[]标记可选参数,例如以下SQL执行语句: select * from table01 where id=${id} [or sex='${sex}'] 用[]括起来的那部分语句,表示当后端服务请求中携带参数${sex}时候,才会生效;不带参数${sex}的时候,[]括起来的语句在执行时将被忽略。 后端服务请求携带了参数id=88,可选参数sex没有携带,则执行SQL语句: select * from table01 where id=88; 后端服务请求携带了参数id=88和sex=female,则执行SQL语句: select * from table01 where id=88 or sex='female'; 父主题: 自定义后端开发(数据后端)
-
配置设备连接信息 解压Demo压缩包,在“src”目录的底层路径下找到DeviceConnectDemo.java文件。 使用Java编辑工具打开这个文件,编辑设备连接的信息。运行成功后,在“设备管理”页面可以看到在线设备状态。 Demo工程中依赖的软件包在lib目录下,使用Demo时需要将demo的lib目录设置为当前工程的lib目录。 // 设备连接地址,格式为:tcp://ip:port final String host = ""; // 设备客户端ID final String clientId = ""; // 示例仅用作测试或示意,设备认证的用户名为敏感信息,请勿硬编码使用 final String userName = ""; // 示例仅用作测试或示意,设备认证的密码为敏感信息,请勿硬编码使用 final String password = ""; // 设备Publish权限的Topic final String pubTopic = ""; // 设备Subscribe权限的Topic final String subTopic = ""; // 设备发送的消息内容 final String payload = "hello world.";
-
自定义后端开发要求 函数后端开发要求: 仅支持使用JavaScript编写函数,JavaScript的运行采用Java Nashorn的运行标准,支持ECMAScript Edition 5.1规范。 函数后端支持的脚本大小最大为32KB。 数据后端开发要求: 若数据后端执行语句查询获取的数据量较大,建议携带offset和limit参数进行分页,避免因响应数据太大导致响应超时。使用方式如下: select * from table01 limit '${limit}' offset ${offset} 其中offset和limit参数key在后端服务请求的Headers、Parameters或Body中传递。 不建议开启结果分页选项,结果分页当前仅支持2000条以内数据的分页。 数据后端支持的执行语句大小最大为32KB。
-
示例 { "msgType": "cloudReq", "mid": 54132, "cmd": "command1", "paras": { "temperature": 123 }, "serviceId": "service1", "deviceId": "D23pigXo"}
-
API调用认证开发要求 开发工具版本要求: IntelliJ IDEA:2018.3.5或以上版本。 Eclipse:3.6.0或以上版本。 Visual Studio:2019 version 16.8.4或以上版本。 开发语言环境版本要求: Java:1.8.111或以上版本的Java Development Kit。 Go:1.14及以上版本的Go安装包。 Python:2.7或3.X版本的Python安装包。 JavaScript:15.10.0及以上版本的Nodejs安装包。 PHP:8.0.3及以上版本的PHP安装包。 Android:4.1.2及以上版本的Android Studio。 浏览器版本要求:Chrome 89.0或以上版本。 SDK签名限制: 使用SDK对API请求签名时,仅支持对Body体为12M及以下的请求进行签名。 发送API请求时,SDK会将当前时间置于HTTP的X-Sdk-Date头,将签名信息置于Authorization头。签名只在一个有限的时间内是有效的,超时即无效。 ROMA Connect除了校验X-Sdk-Date的时间格式外,还会校验该时间值与收到请求的时间差,如果时间差超过15分钟,ROMA Connect将拒绝请求。因此,客户端须注意本地与NTP服务器的时间同步,避免请求消息头X-Sdk-Date的值出现较大误差。
-
后端服务签名校验开发要求 开发工具版本要求: IntelliJ IDEA:2018.3.5或以上版本。 Eclipse:3.6.0或以上版本。 Visual Studio:2019 version 16.8.4或以上版本。 开发语言环境版本要求: Java:1.8.111或以上版本的Java Development Kit。 Python:2.7或3.X版本的Python安装包。 SDK使用限制: Java SDK仅支持hmac和basic类型的后端服务签名。 Python SDK仅支持hmac类型的后端服务签名。 C# SDK仅支持hmac类型的后端服务签名。
-
参数说明 参数 必选/可选 类型 参数描述 clientId 必选 String(256) 一机一密的设备clientId由4个部分组成:deviceId/nodeId、鉴权类型、密码签名类型、时间戳,通过下划线“_”分隔。 鉴权类型:长度1字节,当前支持2个类型: “0”,表示使用一机一密设备的deviceId接入。 “2”,表示使用一机一密设备的nodeId接入。 密码签名类型:长度1字节,当前支持2种类型。 “0”代表HMACSHA256不校验时间戳。 “1”代表HMACSHA256校验时间戳。 时间戳:为设备连接平台时的UTC时间,格式为YYYYMMDDHH,如UTC 时间2018/7/24 17:56:20,则应表示为2018072417。 以deviceId为例的clientId示例为:D39564861q3gDa_0_0_2018072417 Username 必选 String(256) 一机一密的设备“Username”。 使用deviceId接入时填写为设备注册成功后返回的“deviceId”值。 使用nodeId接入时填写为设备注册成功时的“nodeId”值。 Password 必选 String(256) Password的值为使用“HMACSHA256”算法以时间戳为密钥,对secret进行加密后的值。 secret为注册设备时平台返回的secret,或者是设备自身的secret。
-
生产消息 SASL认证方式 注意,加粗内容需要替换为实例自有信息。 from kafka import KafkaProducerimport ssl##连接信息conf = { 'bootstrap_servers': ["ip1:port1","ip2:port2","ip3:port3"], 'topic_name': 'topic_name', 'sasl_plain_username': 'username', 'sasl_plain_password': 'password'}context = ssl.create_default_context()context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)context.verify_mode = ssl.CERT_REQUIRED##证书文件context.load_verify_locations("phy_ca.crt")print('start producer')producer = KafkaProducer(bootstrap_servers=conf['bootstrap_servers'], sasl_mechanism="PLAIN", ssl_context=context, security_protocol='SASL_SSL', sasl_plain_username=conf['sasl_plain_username'], sasl_plain_password=conf['sasl_plain_password'])data = bytes("hello kafka!", encoding="utf-8")producer.send(conf['topic_name'], data)producer.close()print('end producer') 示例代码中的参数说明,可参考获取MQS连接信息获取参数值。 bootstrap_servers:MQS连接地址和端口。 topic_name:要生产消息的Topic名称。 sasl_plain_username和sasl_plain_password:开启SASL_SSL认证时所使用的用户名和密码。 context.load_verify_locations:开启SASL_SSL认证时所使用的客户端证书。 非SASL认证方式 注意,加粗内容需要替换为实例自有信息。 from kafka import KafkaProducerconf = { 'bootstrap_servers': ["ip1:port1","ip2:port2","ip3:port3"], 'topic_name': 'topic_name',}print('start producer')producer = KafkaProducer(bootstrap_servers=conf['bootstrap_servers'])data = bytes("hello kafka!", encoding="utf-8")producer.send(conf['topic_name'], data)producer.close()print('end producer') 示例代码中的参数说明,可参考获取MQS连接信息获取参数值。 bootstrap_servers:MQS连接地址和端口。 topic_name:要生产消息的Topic名称。
-
消费消息 SASL认证方式 注意,加粗内容需要替换为实例自有信息。 from kafka import KafkaConsumerimport ssl##连接信息conf = { 'bootstrap_servers': ["ip1:port1","ip2:port2","ip3:port3"], 'topic_name': 'topic_name', 'sasl_plain_username': 'username', 'sasl_plain_password': 'password', 'consumer_id': 'consumer_id'}context = ssl.create_default_context()context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)context.verify_mode = ssl.CERT_REQUIRED##证书文件context.load_verify_locations("phy_ca.crt")print('start consumer')consumer = KafkaConsumer(conf['topic_name'], bootstrap_servers=conf['bootstrap_servers'], group_id=conf['consumer_id'], sasl_mechanism="PLAIN", ssl_context=context, security_protocol='SASL_SSL', sasl_plain_username=conf['sasl_plain_username'], sasl_plain_password=conf['sasl_plain_password'])for message in consumer: print("%s:%d:%d: key=%s value=%s" % (message.topic, message.partition,message.offset, message.key,message.value))print('end consumer') 示例代码中的参数说明,可参考获取MQS连接信息获取参数值。 bootstrap_servers:MQS连接地址和端口。 topic_name:要消费消息的Topic名称。 sasl_plain_username和sasl_plain_password:开启SASL_SSL认证时所使用的用户名和密码。 consumer_id:消费组名称。根据业务需要,自定义消费组名称,如果设置的消费组不存在,系统会自动创建。 context.load_verify_locations:开启SASL_SSL认证时所使用的客户端证书。 非SASL认证方式 注意,加粗内容需要替换为实例自有信息。 from kafka import KafkaConsumerconf = { 'bootstrap_servers': ["ip1:port1","ip2:port2","ip3:port3"], 'topic_name': 'topic_name', 'consumer_id': 'consumer_id'}print('start consumer')consumer = KafkaConsumer(conf['topic_name'], bootstrap_servers=conf['bootstrap_servers'], group_id=conf['consumer_id'])for message in consumer: print("%s:%d:%d: key=%s value=%s" % (message.topic, message.partition,message.offset, message.key,message.value))print('end consumer') 示例代码中的参数说明,可参考获取MQS连接信息获取参数值。 bootstrap_servers:MQS连接地址和端口。 topic_name:要消费消息的Topic名称。 consumer_id:消费组名称。根据业务需要,自定义消费组名称,如果设置的消费组不存在,系统会自动创建。
-
参数说明 字段名 必选/可选 类型 参数描述 id 必选 Integer 删除子设备命令ID。 deviceId 必选 String 平台生成的设备唯一标识,对应设备客户端ID。 requestTime 必选 Timestamp 请求时间戳。 request 必选 JsonObject 子设备信息。 JsonObject结构体说明 字段名 必选/可选 类型 参数描述 manufacturerName 必选 String 厂商名称。 支持长度2-64。 manufacturerId 必选 String 厂商ID。 支持英文大小写,数字,中划线和下划线,长度2-50。 model 必选 String 产品型号。 支持英文大小写,数字,中划线和下划线,长度2-50。
-
方法详情 public String getType() 获取数据源的类型 返回信息 返回数据源类型 public String getUrl() 获取连接字符串。 返回信息 返回连接字符串 public String getUser() 获取用户名 返回信息 返回用户名 public String getPassword() 获取密码 返回信息 返回密码 public void setType(String type) 设置数据源类型,可以为"mysql","mssql","oracle","postgresql","hive","redis","mongodb" 输入参数 type:类型 public void setUrl(String url) 设置数据源连接字符串。 如果数据源类型为"mysql","mssql","oracle","postgresql","hive",则填写jdbc连接字符串。例如:"jdbc:mysql://127.0.0.1:8888/db?useUnicode=true&characterEncoding=utf8"。 如果为数据源类型为"redis",则格式为"127.0.0.1:6379@0",其中,"@0"可省略,为redis数据库编号。 如果为数据源类型为"mongodb",则格式为"127.0.0.1:27017@db",其中,db为数据库名称。 输入参数 url:连接字符串 public void setUser(String user) 设置数据源用户名。如果为数据源类型为"redis",则不需要填写。 输入参数 user:用户名 public void setPassword(String password) 设置数据源密码。 输入参数 password:密码
-
示例 { "requestTime": 1576639584536, "request": { "manufacturerName": "ATest_n", "manufacturerId": "Test_n", "model": "A_n" }, "id": 8, "deviceId": "n-device"}
-
方法列表 返回类型 方法和说明 String getType() 获取数据源的类型 String getUrl() 获取连接字符串。 String getUser() 获取用户名 String getPassword() 获取密码 void setType() 设置数据源类型,可以为"mysql","mssql","oracle","postgresql","hive","redis","mongodb" void setUrl() 设置数据源连接字符串。 void setUser() 设置数据源用户名 void setPassword() 设置数据源密码
-
使用示例 通过以下java代码生成公钥和私钥: import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.util.Base64;public class Main { public static void main(String[] args) { try { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(1024); KeyPair keyPair = keyPairGenerator.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); System.out.println("publicKey:" + new String(Base64.getEncoder().encode(publicKey.getEncoded()))); PrivateKey privateKey = keyPair.getPrivate(); System.out.println("privateKey:" + new String(Base64.getEncoder().encode(privateKey.getEncoded()))); } catch (Exception e) { e.printStackTrace(); return; } }} 将上述公钥和私钥填入到下面代码中: importClass(com.roma.apic.livedata.common.v1.RSAUtils);importClass(com.roma.apic.livedata.common.v1.Base64Utils);function execute(data) { var publicKeyString = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDd4CRRppmYVlFl3dX4iVGN+2Twy5gLeEPRbvhOko/xFipGF7XV0weTp4wCakgdnm+DR4gBBrQtfAuKwYIBPIr+C1FI5sKYA3NxazDWUcXR3xlPM5D0DWjacjcMjnaj2v21WZxGpwHZHQ9TLd4OBBq3fva1r/cE8s1Lji5QeFiklwIDAQAB"; var privateKeyString = "**********"; var publicKey = RSAUtils.getPublicKey(publicKeyString) var privateKey = RSAUtils.getPrivateKey(privateKeyString) var origin = "hello rsa" var encrypted = RSAUtils.encrypt(Base64Utils.encode(origin), publicKey) var decrypted = RSAUtils.decrypt(encrypted, privateKey) return decrypted}
-
方法列表 返回类型 方法和说明 int getDatabase() 获取jedis的database,默认为0 String[] getIp() 获取redis的IP地址列表 String getMaster() 获取jedis的master名称(当mode为"MASTER_SLAVE"时有效) int getMaxAttempts() 获取jedis的重试次数,默认10000 int getMaxIdel() 获取jedis连接池中空闲连接数的上限,默认5 int getMaxWait() 获取jedis连接池耗尽时等待时间上限,默认60秒 String getMode() 获取jedis的类型,可设置为“SINGLE”/“CLUSTER”/“MASTER_SLAVE” String getPassPhrase() 获取jedis的密码 String[] getPort() 获取所有端口号 int getSoTimeout() 获取jedis的读取超时时间,默认600 int getTimeout() 获取jedis的超时时间,默认1000 void setDatabase(int database) 设置jedis的database void setIp(String[] ip) 设置IP地址 void setMaster(String master) 设置jedis的master名称(当mode为“MASTER_SLAVE”时有效) void setMaxAttempts(int maxAttempts) 设置jedis的重试次数,默认10000 void setMaxIdel(int maxIdel) 设置jedis连接池中空闲连接数的上限,默认5 void setMaxWait(int maxWait) 设置jedis连接池耗尽时等待时间上限,默认60 void setMode(String mode) 设置jedis的类型,可设置为“SINGLE”/“CLUSTER”/“MASTER_SLAVE” void setPassPhrase(String passPhrase) 设置jedis的密码 void setPort(String[] port) 设置端口号 void setSoTimeout(int soTimeout) 设置jedis的读取超时时间 void setTimeout(int timeout) 设置jedis的超时时间
-
方法详情 public int getDatabase() 获取redis的database,默认为0 返回信息 返回database public String[] getIp() 获取所有IP地址 返回信息 返回IP地址的String数组 public String getMaster() 获取redis的master名称(当mode为“MASTER_SLAVE”时有效) 返回信息 返回master名称 public int getMaxAttempts() 获取redis的重试次数,默认10000 返回信息 返回重试次数 public int getMaxIdel() 获取jedis连接池中空闲连接数的上限,默认5 返回信息 返回连接池中空闲连接数的上限 public int getMaxWait() 获取jedis连接池耗尽时等待时间上限,默认60秒 返回信息 返回连接池耗尽时等待时间上限 public String getMode() 获取redis的类型,可设置为“SINGLE”/“CLUSTER”/“MASTER_SLAVE” 返回信息 返回redis的类型 public String getPassPhrase() 获取redis的密码 返回信息 返回redis的密码 public String[] getPort() 获取所有端口号 返回信息 返回端口号的String数组 public int getSoTimeout() 获取jedis的读取超时时间,默认600秒 返回信息 返回soTimeout public int getTimeout() 获取jedis的超时时间,默认1000秒 返回信息 返回超时时间 public void setDatabase(int database) 设置redis的database 输入参数 database:database public void setIp(String[] ip) 设置ip地址 输入参数 ip:IP地址 public void setMaster(String master) 设置redis的master名称(当mode为“MASTER_SLAVE”时有效) 输入参数 master:redis的master名称 public void setMaxAttempts(int maxAttempts) 设置jedis的重试次数 输入参数 maxAttempts:重试次数 public void setMaxIdel(int maxIdel) 设置jedis的连接池中空闲连接数的上限,默认5 输入参数 maxIdel:连接池中空闲连接数的上限 public void setMaxWait(int maxWait) 设置jedis的连接池耗尽时等待时间上限,默认60秒 输入参数 maxWait:连接池耗尽时等待时间上限 public void setMode(String mode) 设置redis的类型,可设置为“SINGLE”/“CLUSTER”/“MASTER_SLAVE” 输入参数 mode:类型 public void setPassPhrase(String passPhrase) 设置redis的密码 输入参数 passPhrase:密码 public void setPort(String[] port) 设置端口号 输入参数 port:端口号 public void setSoTimeout(int soTimeout) 设置jedis的读取超时时间,默认600秒 输入参数 soTimeout:读取超时时间 public void setTimeout(int timeout) 设置jedis的超时时间 输入参数 timeout:超时时间,单位秒
-
使用示例 importClass(com.roma.apic.livedata.client.v1.RedisClient);importClass(com.roma.apic.livedata.config.v1.JedisConfig);function execute(data) { var config = new JedisConfig(); config.setIp(["1.1.1.1"]); config.setPort(["6379"]); config.setMode("SINGLE"); var redisClient = new RedisClient(config); var count = redisClient.get("visit_count") if (!count) { redisClient.put("visit_count", 1); }else { redisClient.put("visit_count", parseInt(count) + 1); } return redisClient.get("visit_count");}
-
使用示例 SQL数据源示例: importClass(com.roma.apic.livedata.client.v1.DataSourceClient);importClass(com.roma.apic.livedata.config.v1.DataSourceConfig);function execute(data){ var config = new DataSourceConfig() config.setType("mysql") config.setUrl("jdbc:mysql://127.0.0.1:3306/db?allowPublicKeyRetrieval=true") config.setUser("username") config.setPassword("password") var ds = new DataSourceClient(config) return ds.execute("SELECT * FROM person where name = ? and age = ?", "Tom", 20);}
-
方法详情 public Object put(String key, Object value) 设置配置参数 输入参数 key:配置信息key value:配置信息value 支持以下配置参数: jco.client.ashost:SAP服务器IP jco.client.sysnr:系统编号 jco.client.client:SAP集团 jco.client.user:SAP用户名 jco.client.passwd:密码 jco.client.lang:登录语言 jco.destination.pool_capacity:最大连接数 jco.destination.peak_limit:最大连接线程 apic.async:是否为异步调用。"true"表示异步调用,默认为同步调用 返回信息 返回value
共99354条
- 1
- ...
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 583
- 584
- 585
- 586
- 587
- 588
- 589
- 590
- 591
- 592
- 593
- 594
- 595
- 596
- 597
- 598
- 599
- 600
- 601
- 602
- 603
- 604
- 605
- 606
- 607
- 608
- 609
- 610
- 611
- 612
- 613
- 614
- 615
- 616
- 617
- 618
- 619
- 620
- 621
- 622
- 623
- 624
- 625
- 626
- 627
- 628
- 629
- 630
- 631
- 632
- 633
- 634
- 635
- 636
- 637
- 638
- 639
- 640
- 641
- 642
- 643
- 644
- 645
- 646
- 647
- 648
- 649
- 650
- 651
- 652
- 653
- 654
- 655
- 656
- 657
- 658
- 659
- 660
- 661
- 662
- 663
- 664
- 665
- 666
- 667
- 668
- 669
- 670
- 671
- 672
- 673
- 674
- 675
- 676
- 677
- 678
- 679
- 680
- 681
- 682
- 683
- 684
- 685
- 686
- 687
- 688
- 689
- 690
- 691
- 692
- 693
- 694
- 695
- 696
- 697
- 698
- 699
- 700
- 701
- 702
- 703
- 704
- 705
- 706
- 707
- 708
- 709
- 710
- 711
- 712
- 713
- 714
- 715
- 716
- 717
- 718
- 719
- 720
- 721
- 722
- 723
- 724
- 725
- 726
- 727
- 728
- 729
- 730
- 731
- 732
- 733
- 734
- 735
- 736
- 737
- 738
- 739
- 740
- 741
- 742
- 743
- 744
- 745
- 746
- 747
- 748
- 749
- 750
- 751
- 752
- 753
- 754
- 755
- 756
- 757
- 758
- 759
- 760
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
- 769
- 770
- 771
- 772
- 773
- 774
- 775
- 776
- 777
- 778
- 779
- 780
- 781
- 782
- 783
- 784
- 785
- 786
- 787
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 795
- 796
- 797
- 798
- 799
- 800
- 801
- 802
- 803
- 804
- 805
- 806
- 807
- 808
- 809
- 810
- 811
- 812
- 813
- 814
- 815
- 816
- 817
- 818
- 819
- 820
- 821
- 822
- 823
- 824
- 825
- 826
- 827
- 828
- 829
- 830
- 831
- 832
- 833
- 834
- 835
- 836
- 837
- 838
- 839
- 840
- 841
- 842
- 843
- 844
- 845
- 846
- 847
- 848
- 849
- 850
- 851
- 852
- 853
- 854
- 855
- 856
- 857
- 858
- 859
- 860
- 861
- 862
- 863
- 864
- 865
- 866
- 867
- 868
- 869
- 870
- 871
- 872
- 873
- 874
- 875
- 876
- 877
- 878
- 879
- 880
- 881
- 882
- 883
- 884
- 885
- 886
- 887
- 888
- 889
- 890
- 891
- 892
- 893
- 894
- 895
- 896
- 897
- 898
- 899
- 900
- 901
- 902
- 903
- 904
- 905
- 906
- 907
- 908
- 909
- 910
- 911
- 912
- 913
- 914
- 915
- 916
- 917
- 918
- 919
- 920
- 921
- 922
- 923
- 924
- 925
- 926
- 927
- 928
- 929
- 930
- 931
- 932
- 933
- 934
- 935
- 936
- 937
- 938
- 939
- 940
- 941
- 942
- 943
- 944
- 945
- 946
- 947
- 948
- 949
- 950
- 951
- 952
- 953
- 954
- 955
- 956
- 957
- 958
- 959
- 960
- 961
- 962
- 963
- 964
- 965
- 966
- 967
- 968
- 969
- 970
- 971
- 972
- 973
- 974
- 975
- 976
- 977
- 978
- 979
- 980
- 981
- 982
- 983
- 984
- 985
- 986
- 987
- 988
- 989
- 990
- 991
- 992
- 993
- 994
- 995
- 996
- 997
- 998
- 999
- 1000
- 1001
- 1002
- 1003
- 1004
- 1005
- 1006
- 1007
- 1008
- 1009
- 1010
- 1011
- 1012
- 1013
- 1014
- 1015
- 1016
- 1017
- 1018
- 1019
- 1020
- 1021
- 1022
- 1023
- 1024
- 1025
- 1026
- 1027
- 1028
- 1029
- 1030
- 1031
- 1032
- 1033
- 1034
- 1035
- 1036
- 1037
- 1038
- 1039
- 1040
- 1041
- 1042
- 1043
- 1044
- 1045
- 1046
- 1047
- 1048
- 1049
- 1050
- 1051
- 1052
- 1053
- 1054
- 1055
- 1056
- 1057
- 1058
- 1059
- 1060
- 1061
- 1062
- 1063
- 1064
- 1065
- 1066
- 1067
- 1068
- 1069
- 1070
- 1071
- 1072
- 1073
- 1074
- 1075
- 1076
- 1077
- 1078
- 1079
- 1080
- 1081
- 1082
- 1083
- 1084
- 1085
- 1086
- 1087
- 1088
- 1089
- 1090
- 1091
- 1092
- 1093
- 1094
- 1095
- 1096
- 1097
- 1098
- 1099
- 1100
- 1101
- 1102
- 1103
- 1104
- 1105
- 1106
- 1107
- 1108
- 1109
- 1110
- 1111
- 1112
- 1113
- 1114
- 1115
- 1116
- 1117
- 1118
- 1119
- 1120
- 1121
- 1122
- 1123
- 1124
- 1125
- 1126
- 1127
- 1128
- 1129
- 1130
- 1131
- 1132
- 1133
- 1134
- 1135
- 1136
- 1137
- 1138
- 1139
- 1140
- 1141
- 1142
- 1143
- 1144
- 1145
- 1146
- 1147
- 1148
- 1149
- 1150
- 1151
- 1152
- 1153
- 1154
- 1155
- 1156
- 1157
- 1158
- 1159
- 1160
- 1161
- 1162
- 1163
- 1164
- 1165
- 1166
- 1167
- 1168
- 1169
- 1170
- 1171
- 1172
- 1173
- 1174
- 1175
- 1176
- 1177
- 1178
- 1179
- 1180
- 1181
- 1182
- 1183
- 1184
- 1185
- 1186
- 1187
- 1188
- 1189
- 1190
- 1191
- 1192
- 1193
- 1194
- 1195
- 1196
- 1197
- 1198
- 1199
- 1200
- 1201
- 1202
- 1203
- 1204
- 1205
- 1206
- 1207
- 1208
- 1209
- 1210
- 1211
- 1212
- 1213
- 1214
- 1215
- 1216
- 1217
- 1218
- 1219
- 1220
- 1221
- 1222
- 1223
- 1224
- 1225
- 1226
- 1227
- 1228
- 1229
- 1230
- 1231
- 1232
- 1233
- 1234
- 1235
- 1236
- 1237
- 1238
- 1239
- 1240
- 1241
- 1242
- 1243
- 1244
- 1245
- 1246
- 1247
- 1248
- 1249
- 1250
- 1251
- 1252
- 1253
- 1254
- 1255
- 1256
- 1257
- 1258
- 1259
- 1260
- 1261
- 1262
- 1263
- 1264
- 1265
- 1266
- 1267
- 1268
- 1269
- 1270
- 1271
- 1272
- 1273
- 1274
- 1275
- 1276
- 1277
- 1278
- 1279
- 1280
- 1281
- 1282
- 1283
- 1284
- 1285
- 1286
- 1287
- 1288
- 1289
- 1290
- 1291
- 1292
- 1293
- 1294
- 1295
- 1296
- 1297
- 1298
- 1299
- 1300
- 1301
- 1302
- 1303
- 1304
- 1305
- 1306
- 1307
- 1308
- 1309
- 1310
- 1311
- 1312
- 1313
- 1314
- 1315
- 1316
- 1317
- 1318
- 1319
- 1320
- 1321
- 1322
- 1323
- 1324
- 1325
- 1326
- 1327
- 1328
- 1329
- 1330
- 1331
- 1332
- 1333
- 1334
- 1335
- 1336
- 1337
- 1338
- 1339
- 1340
- 1341
- 1342
- 1343
- 1344
- 1345
- 1346
- 1347
- 1348
- 1349
- 1350
- 1351
- 1352
- 1353
- 1354
- 1355
- 1356
- 1357
- 1358
- 1359
- 1360
- 1361
- 1362
- 1363
- 1364
- 1365
- 1366
- 1367
- 1368
- 1369
- 1370
- 1371
- 1372
- 1373
- 1374
- 1375
- 1376
- 1377
- 1378
- 1379
- 1380
- 1381
- 1382
- 1383
- 1384
- 1385
- 1386
- 1387
- 1388
- 1389
- 1390
- 1391
- 1392
- 1393
- 1394
- 1395
- 1396
- 1397
- 1398
- 1399
- 1400
- 1401
- 1402
- 1403
- 1404
- 1405
- 1406
- 1407
- 1408
- 1409
- 1410
- 1411
- 1412
- 1413
- 1414
- 1415
- 1416
- 1417
- 1418
- 1419
- 1420
- 1421
- 1422
- 1423
- 1424
- 1425
- 1426
- 1427
- 1428
- 1429
- 1430
- 1431
- 1432
- 1433
- 1434
- 1435
- 1436
- 1437
- 1438
- 1439
- 1440
- 1441
- 1442
- 1443
- 1444
- 1445
- 1446
- 1447
- 1448
- 1449
- 1450
- 1451
- 1452
- 1453
- 1454
- 1455
- 1456
- 1457
- 1458
- 1459
- 1460
- 1461
- 1462
- 1463
- 1464
- 1465
- 1466
- 1467
- 1468
- 1469
- 1470
- 1471
- 1472
- 1473
- 1474
- 1475
- 1476
- 1477
- 1478
- 1479
- 1480
- 1481
- 1482
- 1483
- 1484
- 1485
- 1486
- 1487
- 1488
- 1489
- 1490
- 1491
- 1492
- 1493
- 1494
- 1495
- 1496
- 1497
- 1498
- 1499
- 1500
- 1501
- 1502
- 1503
- 1504
- 1505
- 1506
- 1507
- 1508
- 1509
- 1510
- 1511
- 1512
- 1513
- 1514
- 1515
- 1516
- 1517
- 1518
- 1519
- 1520
- 1521
- 1522
- 1523
- 1524
- 1525
- 1526
- 1527
- 1528
- 1529
- 1530
- 1531
- 1532
- 1533
- 1534
- 1535
- 1536
- 1537
- 1538
- 1539
- 1540
- 1541
- 1542
- 1543
- 1544
- 1545
- 1546
- 1547
- 1548
- 1549
- 1550
- 1551
- 1552
- 1553
- 1554
- 1555
- 1556
- 1557
- 1558
- 1559
- 1560
- 1561
- 1562
- 1563
- 1564
- 1565
- 1566
- 1567
- 1568
- 1569
- 1570
- 1571
- 1572
- 1573
- 1574
- 1575
- 1576
- 1577
- 1578
- 1579
- 1580
- 1581
- 1582
- 1583
- 1584
- 1585
- 1586
- 1587
- 1588
- 1589
- 1590
- 1591
- 1592
- 1593
- 1594
- 1595
- 1596
- 1597
- 1598
- 1599
- 1600
- 1601
- 1602
- 1603
- 1604
- 1605
- 1606
- 1607
- 1608
- 1609
- 1610
- 1611
- 1612
- 1613
- 1614
- 1615
- 1616
- 1617
- 1618
- 1619
- 1620
- 1621
- 1622
- 1623
- 1624
- 1625
- 1626
- 1627
- 1628
- 1629
- 1630
- 1631
- 1632
- 1633
- 1634
- 1635
- 1636
- 1637
- 1638
- 1639
- 1640
- 1641
- 1642
- 1643
- 1644
- 1645
- 1646
- 1647
- 1648
- 1649
- 1650
- 1651
- 1652
- 1653
- 1654
- 1655
- 1656
- 1657
- 1658
- 1659
- 1660
- 1661
- 1662
- 1663
- 1664
- 1665
- 1666
- 1667
- 1668
- 1669
- 1670
- 1671
- 1672
- 1673
- 1674
- 1675
- 1676
- 1677
- 1678
- 1679
- 1680
- 1681
- 1682
- 1683
- 1684
- 1685
- 1686
- 1687
- 1688
- 1689
- 1690
- 1691
- 1692
- 1693
- 1694
- 1695
- 1696
- 1697
- 1698
- 1699
- 1700
- 1701
- 1702
- 1703
- 1704
- 1705
- 1706
- 1707
- 1708
- 1709
- 1710
- 1711
- 1712
- 1713
- 1714
- 1715
- 1716
- 1717
- 1718
- 1719
- 1720
- 1721
- 1722
- 1723
- 1724
- 1725
- 1726
- 1727
- 1728
- 1729
- 1730
- 1731
- 1732
- 1733
- 1734
- 1735
- 1736
- 1737
- 1738
- 1739
- 1740
- 1741
- 1742
- 1743
- 1744
- 1745
- 1746
- 1747
- 1748
- 1749
- 1750
- 1751
- 1752
- 1753
- 1754
- 1755
- 1756
- 1757
- 1758
- 1759
- 1760
- 1761
- 1762
- 1763
- 1764
- 1765
- 1766
- 1767
- 1768
- 1769
- 1770
- 1771
- 1772
- 1773
- 1774
- 1775
- 1776
- 1777
- 1778
- 1779
- 1780
- 1781
- 1782
- 1783
- 1784
- 1785
- 1786
- 1787
- 1788
- 1789
- 1790
- 1791
- 1792
- 1793
- 1794
- 1795
- 1796
- 1797
- 1798
- 1799
- 1800
- 1801
- 1802
- 1803
- 1804
- 1805
- 1806
- 1807
- 1808
- 1809
- 1810
- 1811
- 1812
- 1813
- 1814
- 1815
- 1816
- 1817
- 1818
- 1819
- 1820
- 1821
- 1822
- 1823
- 1824
- 1825
- 1826
- 1827
- 1828
- 1829
- 1830
- 1831
- 1832
- 1833
- 1834
- 1835
- 1836
- 1837
- 1838
- 1839
- 1840
- 1841
- 1842
- 1843
- 1844
- 1845
- 1846
- 1847
- 1848
- 1849
- 1850
- 1851
- 1852
- 1853
- 1854
- 1855
- 1856
- 1857
- 1858
- 1859
- 1860
- 1861
- 1862
- 1863
- 1864
- 1865
- 1866
- 1867
- 1868
- 1869
- 1870
- 1871
- 1872
- 1873
- 1874
- 1875
- 1876
- 1877
- 1878
- 1879
- 1880
- 1881
- 1882
- 1883
- 1884
- 1885
- 1886
- 1887
- 1888
- 1889
- 1890
- 1891
- 1892
- 1893
- 1894
- 1895
- 1896
- 1897
- 1898
- 1899
- 1900
- 1901
- 1902
- 1903
- 1904
- 1905
- 1906
- 1907
- 1908
- 1909
- 1910
- 1911
- 1912
- 1913
- 1914
- 1915
- 1916
- 1917
- 1918
- 1919
- 1920
- 1921
- 1922
- 1923
- 1924
- 1925
- 1926
- 1927
- 1928
- 1929
- 1930
- 1931
- 1932
- 1933
- 1934
- 1935
- 1936
- 1937
- 1938
- 1939
- 1940
- 1941
- 1942
- 1943
- 1944
- 1945
- 1946
- 1947
- 1948
- 1949
- 1950
- 1951
- 1952
- 1953
- 1954
- 1955
- 1956
- 1957
- 1958
- 1959
- 1960
- 1961
- 1962
- 1963
- 1964
- 1965
- 1966
- 1967
- 1968
- 1969
- 1970
- 1971
- 1972
- 1973
- 1974
- 1975
- 1976
- 1977
- 1978
- 1979
- 1980
- 1981
- 1982
- 1983
- 1984
- 1985
- 1986
- 1987
- 1988
- 1989
- 1990
- 1991
- 1992
- 1993
- 1994
- 1995
- 1996
- 1997
- 1998
- 1999
- 2000
- 2001
- 2002
- 2003
- 2004
- 2005
- 2006
- 2007
- 2008
- 2009
- 2010
- 2011
- 2012
- 2013
- 2014
- 2015
- 2016
- 2017
- 2018
- 2019
- 2020
- 2021
- 2022
- 2023
- 2024
- 2025
- 2026
- 2027
- 2028
- 2029
- 2030
- 2031
- 2032
- 2033
- 2034
- 2035
- 2036
- 2037
- 2038
- 2039
- 2040
- 2041
- 2042
- 2043
- 2044
- 2045
- 2046
- 2047
- 2048
- 2049
- 2050
- 2051
- 2052
- 2053
- 2054
- 2055
- 2056
- 2057
- 2058
- 2059
- 2060
- 2061
- 2062
- 2063
- 2064
- 2065
- 2066
- 2067
- 2068
- 2069
- 2070
- 2071
- 2072
- 2073
- 2074
- 2075
- 2076
- 2077
- 2078
- 2079
- 2080
- 2081
- 2082
- 2083
- 2084
- 2085
- 2086
- 2087
- 2088
- 2089
- 2090
- 2091
- 2092
- 2093
- 2094
- 2095
- 2096
- 2097
- 2098
- 2099
- 2100
- 2101
- 2102
- 2103
- 2104
- 2105
- 2106
- 2107
- 2108
- 2109
- 2110
- 2111
- 2112
- 2113
- 2114
- 2115
- 2116
- 2117
- 2118
- 2119
- 2120
- 2121
- 2122
- 2123
- 2124
- 2125
- 2126
- 2127
- 2128
- 2129
- 2130
- 2131
- 2132
- 2133
- 2134
- 2135
- 2136
- 2137
- 2138
- 2139
- 2140
- 2141
- 2142
- 2143
- 2144
- 2145
- 2146
- 2147
- 2148
- 2149
- 2150
- 2151
- 2152
- 2153
- 2154
- 2155
- 2156
- 2157
- 2158
- 2159
- 2160
- 2161
- 2162
- 2163
- 2164
- 2165
- 2166
- 2167
- 2168
- 2169
- 2170
- 2171
- 2172
- 2173
- 2174
- 2175
- 2176
- 2177
- 2178
- 2179
- 2180
- 2181
- 2182
- 2183
- 2184
- 2185
- 2186
- 2187
- 2188
- 2189
- 2190
- 2191
- 2192
- 2193
- 2194
- 2195
- 2196
- 2197
- 2198
- 2199
- 2200
- 2201
- 2202
- 2203
- 2204
- 2205
- 2206
- 2207
- 2208
- 2209
- 2210
- 2211
- 2212
- 2213
- 2214
- 2215
- 2216
- 2217
- 2218
- 2219
- 2220
- 2221
- 2222
- 2223
- 2224
- 2225
- 2226
- 2227
- 2228
- 2229
- 2230
- 2231
- 2232
- 2233
- 2234
- 2235
- 2236
- 2237
- 2238
- 2239
- 2240
- 2241
- 2242
- 2243
- 2244
- 2245
- 2246
- 2247
- 2248
- 2249
- 2250
- 2251
- 2252
- 2253
- 2254
- 2255
- 2256
- 2257
- 2258
- 2259
- 2260
- 2261
- 2262
- 2263
- 2264
- 2265
- 2266
- 2267
- 2268
- 2269
- 2270
- 2271
- 2272
- 2273
- 2274
- 2275
- 2276
- 2277
- 2278
- 2279
- 2280
- 2281
- 2282
- 2283
- 2284
- 2285
- 2286
- 2287
- 2288
- 2289
- 2290
- 2291
- 2292
- 2293
- 2294
- 2295
- 2296
- 2297
- 2298
- 2299
- 2300
- 2301
- 2302
- 2303
- 2304
- 2305
- 2306
- 2307
- 2308
- 2309
- 2310
- 2311
- 2312
- 2313
- 2314
- 2315
- 2316
- 2317
- 2318
- 2319
- 2320
- 2321
- 2322
- 2323
- 2324
- 2325
- 2326
- 2327
- 2328
- 2329
- 2330
- 2331
- 2332
- 2333
- 2334
- 2335
- 2336
- 2337
- 2338
- 2339
- 2340
- 2341
- 2342
- 2343
- 2344
- 2345
- 2346
- 2347
- 2348
- 2349
- 2350
- 2351
- 2352
- 2353
- 2354
- 2355
- 2356
- 2357
- 2358
- 2359
- 2360
- 2361
- 2362
- 2363
- 2364
- 2365
- 2366
- 2367
- 2368
- 2369
- 2370
- 2371
- 2372
- 2373
- 2374
- 2375
- 2376
- 2377
- 2378
- 2379
- 2380
- 2381
- 2382
- 2383
- 2384
- 2385
- 2386
- 2387
- 2388
- 2389
- 2390
- 2391
- 2392
- 2393
- 2394
- 2395
- 2396
- 2397
- 2398
- 2399
- 2400
- 2401
- 2402
- 2403
- 2404
- 2405
- 2406
- 2407
- 2408
- 2409
- 2410
- 2411
- 2412
- 2413
- 2414
- 2415
- 2416
- 2417
- 2418
- 2419
- 2420
- 2421
- 2422
- 2423
- 2424
- 2425
- 2426
- 2427
- 2428
- 2429
- 2430
- 2431
- 2432
- 2433
- 2434
- 2435
- 2436
- 2437
- 2438
- 2439
- 2440
- 2441
- 2442
- 2443
- 2444
- 2445
- 2446
- 2447
- 2448
- 2449
- 2450
- 2451
- 2452
- 2453
- 2454
- 2455
- 2456
- 2457
- 2458
- 2459
- 2460
- 2461
- 2462
- 2463
- 2464
- 2465
- 2466
- 2467
- 2468
- 2469
- 2470
- 2471
- 2472
- 2473
- 2474
- 2475
- 2476
- 2477
- 2478
- 2479
- 2480
- 2481
- 2482
- 2483
- 2484
- 2485
- 2486
- 2487
- 2488
- 2489
- 2490
- 2491
- 2492
- 2493
- 2494
- 2495
- 2496
- 2497
- 2498
- 2499
- 2500
- 2501
- 2502
- 2503
- 2504
- 2505
- 2506
- 2507
- 2508
- 2509
- 2510
- 2511
- 2512
- 2513
- 2514
- 2515
- 2516
- 2517
- 2518
- 2519
- 2520
- 2521
- 2522
- 2523
- 2524
- 2525
- 2526
- 2527
- 2528
- 2529
- 2530
- 2531
- 2532
- 2533
- 2534
- 2535
- 2536
- 2537
- 2538
- 2539
- 2540
- 2541
- 2542
- 2543
- 2544
- 2545
- 2546
- 2547
- 2548
- 2549
- 2550
- 2551
- 2552
- 2553
- 2554
- 2555
- 2556
- 2557
- 2558
- 2559
- 2560
- 2561
- 2562
- 2563
- 2564
- 2565
- 2566
- 2567
- 2568
- 2569
- 2570
- 2571
- 2572
- 2573
- 2574
- 2575
- 2576
- 2577
- 2578
- 2579
- 2580
- 2581
- 2582
- 2583
- 2584
- 2585
- 2586
- 2587
- 2588
- 2589
- 2590
- 2591
- 2592
- 2593
- 2594
- 2595
- 2596
- 2597
- 2598
- 2599
- 2600
- 2601
- 2602
- 2603
- 2604
- 2605
- 2606
- 2607
- 2608
- 2609
- 2610
- 2611
- 2612
- 2613
- 2614
- 2615
- ...
- 2616
- 2617
- 2618
- 2619
- 2620
- 2621
- 2622
- 2623
- 2624
- 2625
- 2626
- 2627
- 2628
- 2629
- 2630
- 2631
- 2632
- 2633
- 2634
- 2635
- 2636
- 2637
- 2638
- 2639
- 2640
- 2641
- 2642
- 2643
- 2644
- 2645
- 2646
- 2647
- 2648
- 2649
- 2650
- 2651
- 2652
- 2653
- 2654
- 2655
- 2656
- 2657
- 2658
- 2659
- 2660
- 2661
- 2662
- 2663
- 2664
- 2665
- 2666
- 2667
- 2668
- 2669
- 2670
- 2671
- 2672
- 2673
- 2674
- 2675
- 2676
- 2677
- 2678
- 2679
- 2680
- 2681
- 2682
- 2683
- 2684
- 2685
- 2686
- 2687
- 2688
- 2689
- 2690
- 2691
- 2692
- 2693
- 2694
- 2695
- 2696
- 2697
- 2698
- 2699
- 2700
- 2701
- 2702
- 2703
- 2704
- 2705
- 2706
- 2707
- 2708
- 2709
- 2710
- 2711
- 2712
- 2713
- 2714
- 2715
- 2716
- 2717
- 2718
- 2719
- 2720
- 2721
- 2722
- 2723
- 2724
- 2725
- 2726
- 2727
- 2728
- 2729
- 2730
- 2731
- 2732
- 2733
- 2734
- 2735
- 2736
- 2737
- 2738
- 2739
- 2740
- 2741
- 2742
- 2743
- 2744
- 2745
- 2746
- 2747
- 2748
- 2749
- 2750
- 2751
- 2752
- 2753
- 2754
- 2755
- 2756
- 2757
- 2758
- 2759
- 2760
- 2761
- 2762
- 2763
- 2764
- 2765
- 2766
- 2767
- 2768
- 2769
- 2770
- 2771
- 2772
- 2773
- 2774
- 2775
- 2776
- 2777
- 2778
- 2779
- 2780
- 2781
- 2782
- 2783
- 2784
- 2785
- 2786
- 2787
- 2788
- 2789
- 2790
- 2791
- 2792
- 2793
- 2794
- 2795
- 2796
- 2797
- 2798
- 2799
- 2800
- 2801
- 2802
- 2803
- 2804
- 2805
- 2806
- 2807
- 2808
- 2809
- 2810
- 2811
- 2812
- 2813
- 2814
- 2815
- 2816
- 2817
- 2818
- 2819
- 2820
- 2821
- 2822
- 2823
- 2824
- 2825
- 2826
- 2827
- 2828
- 2829
- 2830
- 2831
- 2832
- 2833
- 2834
- 2835
- 2836
- 2837
- 2838
- 2839
- 2840
- 2841
- 2842
- 2843
- 2844
- 2845
- 2846
- 2847
- 2848
- 2849
- 2850
- 2851
- 2852
- 2853
- 2854
- 2855
- 2856
- 2857
- 2858
- 2859
- 2860
- 2861
- 2862
- 2863
- 2864
- 2865
- 2866
- 2867
- 2868
- 2869
- 2870
- 2871
- 2872
- 2873
- 2874
- 2875
- 2876
- 2877
- 2878
- 2879
- 2880
- 2881
- 2882
- 2883
- 2884
- 2885
- 2886
- 2887
- 2888
- 2889
- 2890
- 2891
- 2892
- 2893
- 2894
- 2895
- 2896
- 2897
- 2898
- 2899
- 2900
- 2901
- 2902
- 2903
- 2904
- 2905
- 2906
- 2907
- 2908
- 2909
- 2910
- 2911
- 2912
- 2913
- 2914
- 2915
- 2916
- 2917
- 2918
- 2919
- 2920
- 2921
- 2922
- 2923
- 2924
- 2925
- 2926
- 2927
- 2928
- 2929
- 2930
- 2931
- 2932
- 2933
- 2934
- 2935
- 2936
- 2937
- 2938
- 2939
- 2940
- 2941
- 2942
- 2943
- 2944
- 2945
- 2946
- 2947
- 2948
- 2949
- 2950
- 2951
- 2952
- 2953
- 2954
- 2955
- 2956
- 2957
- 2958
- 2959
- 2960
- 2961
- 2962
- 2963
- 2964
- 2965
- 2966
- 2967
- 2968
- 2969
- 2970
- 2971
- 2972
- 2973
- 2974
- 2975
- 2976
- 2977
- 2978
- 2979
- 2980
- 2981
- 2982
- 2983
- 2984
- 2985
- 2986
- 2987
- 2988
- 2989
- 2990
- 2991
- 2992
- 2993
- 2994
- 2995
- 2996
- 2997
- 2998
- 2999
- 3000
- 3001
- 3002
- 3003
- 3004
- 3005
- 3006
- 3007
- 3008
- 3009
- 3010
- 3011
- 3012
- 3013
- 3014
- 3015
- 3016
- 3017
- 3018
- 3019
- 3020
- 3021
- 3022
- 3023
- 3024
- 3025
- 3026
- 3027
- 3028
- 3029
- 3030
- 3031
- 3032
- 3033
- 3034
- 3035
- 3036
- 3037
- 3038
- 3039
- 3040
- 3041
- 3042
- 3043
- 3044
- 3045
- 3046
- 3047
- 3048
- 3049
- 3050
- 3051
- 3052
- 3053
- 3054
- 3055
- 3056
- 3057
- 3058
- 3059
- 3060
- 3061
- 3062
- 3063
- 3064
- 3065
- 3066
- 3067
- 3068
- 3069
- 3070
- 3071
- 3072
- 3073
- 3074
- 3075
- 3076
- 3077
- 3078
- 3079
- 3080
- 3081
- 3082
- 3083
- 3084
- 3085
- 3086
- 3087
- 3088
- 3089
- 3090
- 3091
- 3092
- 3093
- 3094
- 3095
- 3096
- 3097
- 3098
- 3099
- 3100
- 3101
- 3102
- 3103
- 3104
- 3105
- 3106
- 3107
- 3108
- 3109
- 3110
- 3111
- 3112
- 3113
- 3114
- 3115
- 3116
- 3117
- 3118
- 3119
- 3120
- 3121
- 3122
- 3123
- 3124
- 3125
- 3126
- 3127
- 3128
- 3129
- 3130
- 3131
- 3132
- 3133
- 3134
- 3135
- 3136
- 3137
- 3138
- 3139
- 3140
- 3141
- 3142
- 3143
- 3144
- 3145
- 3146
- 3147
- 3148
- 3149
- 3150
- 3151
- 3152
- 3153
- 3154
- 3155
- 3156
- 3157
- 3158
- 3159
- 3160
- 3161
- 3162
- 3163
- 3164
- 3165
- 3166
- 3167
- 3168
- 3169
- 3170
- 3171
- 3172
- 3173
- 3174
- 3175
- 3176
- 3177
- 3178
- 3179
- 3180
- 3181
- 3182
- 3183
- 3184
- 3185
- 3186
- 3187
- 3188
- 3189
- 3190
- 3191
- 3192
- 3193
- 3194
- 3195
- 3196
- 3197
- 3198
- 3199
- 3200
- 3201
- 3202
- 3203
- 3204
- 3205
- 3206
- 3207
- 3208
- 3209
- 3210
- 3211
- 3212
- 3213
- 3214
- 3215
- 3216
- 3217
- 3218
- 3219
- 3220
- 3221
- 3222
- 3223
- 3224
- 3225
- 3226
- 3227
- 3228
- 3229
- 3230
- 3231
- 3232
- 3233
- 3234
- 3235
- 3236
- 3237
- 3238
- 3239
- 3240
- 3241
- 3242
- 3243
- 3244
- 3245
- 3246
- 3247
- 3248
- 3249
- 3250
- 3251
- 3252
- 3253
- 3254
- 3255
- 3256
- 3257
- 3258
- 3259
- 3260
- 3261
- 3262
- 3263
- 3264
- 3265
- 3266
- 3267
- 3268
- 3269
- 3270
- 3271
- 3272
- 3273
- 3274
- 3275
- 3276
- 3277
- 3278
- 3279
- 3280
- 3281
- 3282
- 3283
- 3284
- 3285
- 3286
- 3287
- 3288
- 3289
- 3290
- 3291
- 3292
- 3293
- 3294
- 3295
- 3296
- 3297
- 3298
- 3299
- 3300
- 3301
- 3302
- 3303
- 3304
- 3305
- 3306
- 3307
- 3308
- 3309
- 3310
- 3311
- 3311
推荐文章