-
文档内容快速浏览:1 序言:Rust语言简介 1.1 核心概念:所有权系统2 使用Rust进行HTTP Web后端应用开发 2.1 实战演练 2.1.1 准备后端应用服务器 2.1.1 安装相关的工具链 2.1.2 编写后端Web应用 2.2 API部署1 序言:Rust语言简介参与过C/C++大型项目的同学可能都经历过因为Null Pointer、Memory Leak等问题“被” 加班了不知道多少个晚上。别沮丧,你不是一个人,Mozilla Firefox的开发者们同样经历过这个问题。浏览器可以说是我们日常使用最为频繁的软件了,目前主流的浏览器主要 有Google Chrome、Internet Explorer、Mozilla Firefox。为了提升用户体验,Mozilla就已经启动了多线程渲染的计划。然而,面对大型的C/C++工程,Mozilla的开发者们也坚持不住了。此时,Rust进入了开发者的眼中,与C语言ABI兼容、多编程范式支持、无GC及独特的所有权系统,使得Mozilla与Rust语言一拍即合,并迅速启动了 Mozilla 的下一代浏览器引擎项目:servo,到目前为止(2018年8 月),servo已经成为了除Rust编译器自身外,社区中最大的Rust项目。servo目前已经部 分应用在Firefox 57之后的版本中。Rust语言的设计目标是安全、高效、并发以及实用性。Rust 从一定程度上解决了C++的以 下痛点:1. 容器/数组越界访问;2. 动态内存分配的泄露与double free问题;3. 难以对依赖进行管理;其中前两点在C/C++项目中是最容易引发Bug以及安全问题的原因,依靠人来对这些问题进行检查往往不是最佳的解决方案。Rust通过其独特的所有权系统,简化所研究的对象,使得一些隐晦的问题在编译期间便暴露出来。任何事情都是有两面性的,由于严格的编译期检查以及工程实现上的取舍,Rust在一定程度上牺牲了编译速度以及灵活性,对“灵活性”的舍弃并不代表Rust语言的表现力下降,只是我们在编写Rust程序时,可能需要 改变一下以往的思路。在Rust圈子中,有一句调侃:“C++是调试的时候想撞墙,而Rust是编译的时候想撞墙”。接下来我们将通过一个简单的例子来建立Rust中所有权系统的一个基本印象。1.1 核心概念:所有权系统Rust 的所有权系统包括三个核心概念:所有权、借用以及生命周期。我们首先来通过一个 简单的例子来建立对所有权以及生命周期的直观概念。#[derive(Debug)] struct Foo; fn main() { let foo = Foo; // Note: Foo not implement Copy trait let bar = foo; println!("{:?}", bar); // println!("{:?}", foo); }首先创建了一个Foo类型的变量foo,然后我们执行let bar = foo;,然后我们尝试 输出这两个变量的值,如果我们将第9行的注释去掉,程序将无法通过编译,这是因为在 Rust中,对于没有实现Copy trait的类型,如果我们将一个绑定赋给另一个绑定,默认 使用的是move语义,也即对于任意给定的资源,当且仅当有一个变量绑定与之对应。想要进一步学习Rust的小哥哥小姐姐,可以参考Rust Learning。2 使用Rust进行HTTP Web后端应用开发在Rust生态中进行HTTP Web后端应用开发目前主要依赖两个基础库:http 以及hyper,其中 http 提供HTTP标准相关的基础类型,如Request<T> 、Response<T>以及StatusCode和常用的Header等;hyper的定位是一个高效、准确的 HTTP底层库,它封装了HTTP的报文解析、报文编码处理、连接控制等内容,对于用户而言 只需要实现一个类似于Fn(Request) -> Response的映射,就可以完成HTTP Web服务端的开 发。基于http以及hyper,社区中还有很多用于Web应用开发的框架,常用的有:• rocket• iron• actix-web• tower-web值得一提的是上周刚发布的tower-web,因为这是官方net团队2018年工作计划的一部分, 这个库在未来会为Rust生态提供一个灵活、高效、易于使用的Web开发框架。那么事不宜迟, 我们通过实战演练来一睹为快。 在本月月底,tower-web将会集成到warp项目中,成为warp框架的一部分,开发的重心将会转移到warp上。2.1 实战演练2.1.1 准备后端应用服务器登录华为云,并创建弹性云服务器作为我们的后端应用服务器。实战中使用的系统版本为Ubuntu 16.04,如果选择不同的系统需要根据情况调整命令。2.1.2 安装相关的工具链apt update && apt install build-essential# 安装Rust工具链curl https://sh.rustup.rs -sSf | sh这一步结束后,我们就可以开始编写我们的应用服务了。2.1.3 编写后端Web应用这次分享我们来构建一个RESTful中文分词API。1. 首先我们来创建一个Rust工程 cargo new --bin chinese_segmentation2. 接下来在Cargo.toml中添加相关依赖。[dependencies] tower-web = "0.2" # Jieba Chinese Work Segmentation jieba-rs = "0.2" # logging utils log = "0.4.0" env_logger = "0.5.12" # Serializing responses, deserializing requests serde = "1.0.70"3. 然后是我们的main.rs,与其他语言一样,在文件开始的部分引入外部依赖以及相关声明:extern crate jieba_rs; #[macro_use] extern crate tower_web; #[macro_use] extern crate log; extern crate env_logger; use std::iter::FromIterator; use std::collections::HashSet; use jieba_rs::Jieba; use tower_web::ServiceBuilder;4. 接下来我们定义我们的服务资源ChineseTokenizer:#[derive(Debug)] struct ChineseTokenizer { inner: Jieba, } impl ChineseTokenizer { pub fn new() -> ChineseTokenizer { ChineseTokenizer { inner: Jieba::new() } } //对传入的字符串进行分词,并返回一个字符串向量 pub fn cut(&self, text: &String) -> Vec<String> { let words = self.inner.cut(&text, true) .into_iter() .map(|word| word.to_owned()) .collect::<HashSet<String>>(); let mut words = Vec::from_iter(words.into_iter()); //由于使用HashSet进行去重会引入不确定性, //因此对结果进行重排,使输出的结果有序。 words.sort(); words } }5. 定义了我们的服务资源后,我们来定义输入Web API的输入输出类型:#[derive(Debug, Extract)] struct TokenizeRequest { text: String } #[derive(Debug, Response)] #[web(status = "200")] //当handler返回Ok(xx)时,返回200状态码 struct TokenizeResponse { words: Vec<String>, }6. 到目前为止,我们已经有了我们的服务资源,输入输出类型,接下来就到我们的重头戏了, Web 部分的实现,别担心,因为真的很简单。impl_web! { impl ChineseTokenizer { #[post("/tokenize")] #[content_type("application/json")] fn tokenize(&self, body: TokenizeRequest) -> Reqult<TokenizeResponse, ()> { Ok(TokenizeResponse { words: self.cut(&body.text), }) } } }7. 最后是我们的main函数:fn main() { //初始化Logger env_logger::init(); let addr = "0.0.0.0:8081".parse().expect("invalid address"); info!("listening on http://{}", addr); ServiceBuilder::new() .resource(ChineseTokenizer::new()) //注册我们的服务资源 .run(&addr) //让我们的服务跑起来 .unwrap(); }8. 现在,我们通过命令RUST_LOG=chinese_segmentation=info cargo run --release来检验 一下我们的成果了。 服务在本地跑起来之后,我们可以通过命令 curl -H "Content-Type: application/json" -X POST -d '{"text":"中间件小哥"}' <url> 来测试一下我们的接口。 本地测试通过之后,就需要着手开始部署了,我们检查一下弹性云服务器的安全组的入方向 是否放开8081端口。2.2 API 部署API 网关集成了监控、流控、负载均衡等一系列功能,为开发者提供高性能、高可用的API 托管服务,在本次实践中,我们将我们的API部署在API网关中。1. 登录华为云API网关服务,选择“新建API”。 2. 填写API的基本信息 在本次实验中,选择无认证。 3. 定义API请求。 请求路径填为 /segment,方法为 POST 4. 定义后端服务。 请求方式设置为POST,在VPC通道这一项中,我们需要新建VPC通道。端口设置为8081, 并将其与弹性云服务器关联。 6. 创建完VPC通道后,回到API创建页面,填入相关信息: 7. 网关创建完成后,我们需要回到我们的弹性云服务器,将我们的后端服务器先跑起来: RUST_LOG=chinese_segmentation=info nohup ./target/release/chinese_segmentation 2>&1 ~/api.log & 作为示例,这里使用nohup命令来跑我们的服务。但在生产环境中,建议使用 systemd等工具来跑服务。8. 服务在云服务器运行起来之后,将API发布至RELEASE环境中。 然后我们就可以和我们的API愉快地玩耍啦。 欢迎扫码查看更多精彩:
-
序言:MoXing是华为云深度学习服务提供的网络模型开发API。相对于TensorFlow和MXNet等原生API而言,MoXing API让模型的代码编写更加简单,而且能够自动获取高性能的分布式执行能力。1、初识华为云深度学习的王牌利器 — MoXing首先,“MoXing”是“模型”一词的汉语拼音。因为深度学习时代,中国的科研和工程团队逐步成为行业的引领者,使用源于中文的名称,彰显了深度学习服务(DLS)研发团队的自信,DLS研发团队将努力把MoXing API打造为模型开发领域的业界标杆。点击阅读2、基于TensorFlow运行参数教程这章主要介绍用户在定义运行参数时遇到的常见报错及解决办法。MoXing没有对运行参数定义特殊API,用户可根据自己的习惯定义运行参数。建议使用TensorFlow的flags组件来定义。点击阅读3、数据输入教程本文主要介绍MoXing将数据的输入定义在input_fn方法中,并在mox.run时注册该方法。点击阅读4、模型定义教程本文主要讲述MoXing将模型定义在model_fn方法中,并在mox.run时注册该方法。点击阅读5、优化器配置用户可以使用mox.get_optimizer_fn来获取MoXing内置的Optimizer,也可以使用TensorFlow定义或由用户自己实现的Optimizer。此外,MoXing还提供了OptimizerWrapper的用法。点击阅读6、运行与公共组件本文为MoXing系列文章第六篇,主要介绍MoXing运行及公共组件。点击阅读
-
【摘要】广州微梦信息科技有限公司是一家专业的网络服务提供商,公司主营的业务有网站建站,SEO优化推广,小程序开发等业务。公司致力于帮助企业打造出让人眼前一亮的企业品牌形象。 【导语】2018年7月22日,广州微梦信息科技有限公司入驻华为云市场,网站建设,SEO优化推广,小程序开发是我们的主要业务。目前微梦使用的系统,很大程度地降低了企业使用网站难度,实现让企业主无需懂任何代码知识,即能轻松地应用和使用网站,后台操作方式是拖拽完成的。那目前产品应用主要有几个方面。 一、企业建站:在目前互联网、移动互联网高度发达的世界,建立一个企业网站,几乎是一个企业开启业务的标配,但是现在建站市场鱼龙混杂,很多企业几乎都遇到了以下的这些问题:1、 网站不易管理,更新维护需要专业人员。2、 不懂SEO,没流量,网站成僵尸摆设。3、 兼容性差,修改需要花钱改版微梦深知中小企业的痛点,推出了适合于企业应用的H5响应网站,网站采用SAAS部署,繁琐的服务器设置和维护交给我们。界面采用流行的可视化操作方式,让企业管理人员可以专注于企业发展,而无需在网站方面花费太多的时间。 而针对用户最头痛的问题,网站的流量问题,系统采用专业的算法,可以做到定时提醒你对网站做某一方面的操作来提高网站的排名,比如提醒您发布发文章,添加产品等。目前行内还没了解到其它家能做到如此。 二、小程序建设:小程序最近的应用非常火,很多的企业都想拥有自己的小程序,分享流量的红利,但是对于企业来说,如何用性价比最高的产品来实现自己的需求,就很重要了,微梦科技对于,专门开发了一套小程序的应用系统,让用户在以最低的成本,最快的速度和最快捷的方式实现小程序的上线。目前,我司开发出来的小程序被大量应用于企业展示、商城、商圈、酒店、美容、培训、餐饮等行业。 当然,除了上面的服务,微梦科技也提供seo优化,商城、分销商城,O2O等服务,更多详情可以进入云市场店铺查看。 三、结束语 好的产品,再配上华为云计算的地基,相信一定能给用户带来更加可靠稳定的服务,让我们一起期待见证。我们的联系方式:公司网址:www.wmcom.cn公司地址:广州市天河区潭村路348号马赛国际商务中心1711联系电话:18520224701
-
马上就是星期五 17:30,面对眼前满满两页A4纸的API列表,下周一就要上线,想想要手动把这些API一个个的注册到网关上,是否有几分无奈,您是否觉得这个周末的约会又要泡汤了? 不要怕,有问题AOS来帮忙解决。亲爱的华为云 AOS用户: AOS最新版本已经实现华为云API网关服务基本资源对象的编排管理,包括:API、API分组、API流控。AOS提供快速编排API资源的能力,您可以通过在模板中复制已有的API对象,快速完成大量API资源对象的编写,并通过AOS的编排能力,迅速在API网关上进行批量注册和流控配置,提升API管理效率十倍以上。有关华为云AOS的更多信息,请访问我们的网站:产品页面 控制台 帮助文档 发布历史 支持的华为云资源
-
体验demo链接:https://console.huaweicloud.com/apig/#/apig/expdemo以“电话号码归属地查询”为例,一键式体验demo,一分钟内完成API的开放,有图有真相。1、开始“体验Demo”,后台自动完成API的开放。2、调试API,查看返回结果。3、通过浏览器调用API,查询电话号码的归属地。 通过以下界面查看体验demo创建的API分组详情、API调用情况、修改流控策略方法:查看体验demo创建的API分组详情: 查看体验demo创建的API调用情况(请求次数、调用延迟时间、调用错误次数):修改体验demo创建的流控信息:如果想要了解更多功能,请参见《API网关 用户指南》。
-
一、概要 Hadoop YARN提供开放在8088和8090端口的REST API,允许用户直接通过这些API创建和提交任务(http://hadoop.apache.org/docs/r2 ... ISubmit_Application) 近期,有攻击者利用此REST API对未启用Kerbose认证的MRS集群进行攻击,攻击者可以在未授权的情况下远程执行脚本和代码,从而再进一步下载启动挖矿程序达到挖矿的目的。该漏洞也可导致ECS虚机被攻击者控制。 请涉及威胁的租户根据自身业务情况,采取防护措施。 二、威胁级别 威胁级别:【紧急】 (说明:威胁级别共四级:一般、重要、严重、紧急。) 三、影响范围 未启用Kerbose认证的MRS集群,MRS Master节点绑定弹性IP(EIP),绑定弹性IP的节点端口入方向的安全组规则开放Any或0.0.0.0。 四、排查和处置 排查方法: 1.检查MRS Master节点绑定弹性IP; 2.检查系绑定弹性IP的节点端口入方向的安全组规则开放Any或0.0.0.0; 3.检查YARN的Application列表是否存在未知任务; 4.检查操作系统是否存在/var/tmp/java的进程; 5.检查操作系统中是否存在文件/var/spool/cron/yarn_user; 6.检查crontab任务列表是否存在未知任务。 处置方案: 1.MRS Master节点解绑弹性IP或删除对端口入方向的安全组规则开放Any或0.0.0.0的安全组规则; 2.通过iptables或者安全组规则配置访问策略,限制端口入方向规则仅允许指定IP; 3.Kill掉YARN上的未知Application; 4.Kill掉所有/var/tmp/java进程,并删除/var/tmp/java文件; 5.删除/var/spool/cron/yarn_user文件; 6.删除未知的crontab任务。 五、安全建议 1.使用启用Kerbose认证的MRS集群; 2.如有实际需求使用未启用Kerbose认证的MRS集群,配置严格访问范围的安全组规则,禁止入方向允许Any或0.0.0.0的访问。
-
API测试体验官活动已于4月30日结束,感谢大家的参与及提出的宝贵意见,现将获奖名单公布如下:优质建议奖:1. 获奖楼层:板凳;论坛用户名:ecstatic2. 获奖楼层:第五楼;论坛用户名:allenzhang奖品:肩颈**器一个幸运满满奖:1. 获奖楼层:沙发;论坛用户名:zekelove2. 获奖楼层:地板;论坛用户名:LL3. 获奖楼层:第六楼;论坛用户名:好友4. 获奖楼层:第八楼;论坛用户名:蓝书签5. 获奖楼层:第十楼;论坛用户名:小豆奖品:笔记本支架一个恭喜以上获奖用户,请在5个自然日内扫描下方二维码添加服务人员微信,验证信息输入“API”,请将华为云用户名、帖子所在楼层、姓名、手机号、收货地址发送给微信服务人员,奖品将尽快为您寄出。所有奖品均包邮,不额外收取任何费用。14756
-
本帖最后由 云彩飞扬 于 2018-3-20 10:42 编辑[*]下载并解压DmsKafkaDemo示例工程代码。 [*]打开Eclipse,通过“File -> Import…”,“Select an import source”选择“Exiting Projects Into Workspace”,选择DmsKafkaDemo解压目录,导入示例工程代码。 [*]选择“Project -> Build Project”,执行编译构建。 [*]鼠标右键单击DmsKafkaDemo项目,在弹出的上下文菜单中选择“Export…”,选择“Java -> JAR file”,填写待生成的JAR文件保存位置和名称,导出JAR文件。 [*]使用新生成的JAR文件替换弹性云服务器DmsKafkaDemo/dist/libs目录下的dms.kafka.demo.jar文件,按照“运行示例工程”执行验证。
-
本帖最后由 云彩飞扬 于 2018-3-20 10:39 编辑[*]登录弹性云服务器。说明:用户可以直接在192网段的ECS虚拟机上运行。 [*]安装Java JDK或JRE,并配置JAVA_HOME与PATH环境变量,使用执行用户在用户家目录下修改.bash_profile,添加如下行。 export JAVA_HOME=/opt/java/jdk1.8.0_151export PATH=$JAVA_HOME/bin:$PATH执行source .bash_profile命令使修改生效。 说明:ECS虚拟机默认自带的JDK可能不符合要求,例如OpenJDK,需要配置为Oracle的JDK,可至Oracle官方下载页面下载Java Development Kit 1.8.111及以上版本。 [*]使用root用户编辑/etc/resolv.conf文件,配置DNS服务器地址。 在第一行增加如下:nameserver 100.125.1.250 [*]下载DmsKafkaDemo示例工程代码。 [*]解压DmsKafkaDemo.zip压缩包。 $ unzip DmsKafkaDemo.zip [*]进入DmsKafkaDemo/dist目录,该目录下包含预编译好的二进制文件和执行脚本。 $ cd DmsKafkaDemo/dist [*]编辑配置文件config/dms_kafka_client_jaas.conf,设置access_key、secret_key和project_id。 $ vim config/dms_kafka_client_jaas.conf设置内容如下(其中标红内容需要替换为实际值):KafkaClient { com.huawei.middleware.kafka.sasl.client.KafkaLoginModule required access_key=VAODAIIJGPUAYTJRRLOD secret_key=ZHN49c6bpwDiQvPqKJ5CxutJxqc04Glt9xSzxYWi project_id=bd67aaead60940d688b872c31bdc653b;}; [*]编辑配置文件config/producer.properties,设置topic和bootstrap.servers。 $ vim config/producer.properties设置内容如下(其中标红内容需要替换为实际值):topic=k-bd67aaead60940d688b872c31bdc653b-4df89da6-ede4-4072-93e0-28dc6e866299bootstrap.servers=dms-kafka.cn-north-1.myhuaweicloud.com:37000ssl.truststore.password=dms@kafkaacks=allretries=1batch.size=16384buffer.memory=33554432key.serializer=org.apache.kafka.common.serialization.StringSerializervalue.serializer=org.apache.kafka.common.serialization.StringSerializersecurity.protocol=SASL_SSLsasl.mechanism=DMS [*]编辑配置文件config/consumer.properties,设置topic、bootstrap.servers和group.id。 $ vim config/consumer.properties设置内容如下(其中标红内容需要替换为实际值):topic=k-bd67aaead60940d688b872c31bdc653b-4df89da6-ede4-4072-93e0-28dc6e866299bootstrap.servers=dms-kafka.cn-north-1.myhuaweicloud.com:37000group.id=g-7ec0caac-01fb-4f91-a4f2-0a9dd48f8af7ssl.truststore.password=dms@kafkasecurity.protocol=SASL_SSLsasl.mechanism=DMSkey.deserializer=org.apache.kafka.common.serialization.StringDeserializervalue.deserializer=org.apache.kafka.common.serialization.StringDeserializerauto.offset.reset=earliestenable.auto.commit=false [*]运行生产消息示例。 $ bash produce.sh [*]运行消费消息示例。 $ bash consume.sh
-
本帖最后由 云彩飞扬 于 2018-3-20 10:22 编辑 开发环境Eclipse:Eclipse 3.6.0及以上版本,可至Eclipse官方网站下载。JDK:Java Development Kit 1.8.111及以上版本,可至Oracle官方下载页面下载。Maven:Apache Maven 3.0.3及以上版本。创建Kafka队列通过浏览器登录华为云,在分布式消息服务控制台中创建队列,队列类型选择“Kafka队列”。请记录Kafka Topic ID,后续访问需要使用。如果已创建过Kafka队列,可以跳过此步骤。创建消费组通过浏览器登录华为云,在分布式消息服务控制台中选择上文创建的Kafka队列,为该队列创建一个消费组。请记录消费组ID,后续访问需要使用。如果已为该Kafka队列创建过消费组,可以跳过此步骤。创建访问密钥通过浏览器登录华为云,选择“我的凭证”菜单,单击“管理访问密钥”标签,新增一组访问密钥,保存credentials.csv文件到本地。从credentials.csv文件中可以提取“Access Key Id”和“Secret Access Key”。如果之前已创建过访问密钥,可以跳过此步骤。获取项目ID通过浏览器登录华为云,选择“我的凭证”菜单,单击“项目列表”标签,根据所属区域记录对应的项目ID。获取区域和EndpointRegion域名说明中国华北区1dms-kafka.cn-north-1.myhuaweicloud.com:37000在华为云(ECS)上运行Demo示例,使用该endpoint访问DMS服务。中国华东区2dms-kafka.cn-east-2.myhuaweicloud.com:37000中国华南区1dms-kafka.cn-south-1.myhuaweicloud.com:37000中国华北区1dms-kafka.cn-north-1.myhuaweicloud.com:37003在本地(公网)运行Demo示例,使用该endpoint访问DMS服务。申请弹性云服务器说明:在华为云(ECS)上运行DMS Demo示例,需要先申请弹性云服务器。 通过浏览器登录华为云,在弹性云服务器控制台中申请创建一台Linux弹性云服务器,并绑定弹性IP。请记录弹性IP地址、用户名和密码,后续访问需要使用。如果已申请过华为云弹性云服务器,可以跳过此步骤。说明:弹性IP用于登录弹性云服务器,以及上传文件等。 环境信息汇总表1 环境信息汇总类型项目收集的信息(以下为示例,请根据实际情况替换)弹性云服务器弹性IP114.115.141.228用户名huaweicloud密码password分布式消息服务队列名称my-kafka-queue队列ID4df89da6-ede4-4072-93e0-28dc6e866299队列类型Kafka队列Kafka Topick-bd67aaead60940d688b872c31bdc653b-4df89da6-ede4-4072-93e0-28dc6e866299消费组名称my-consumer-group消费组IDg-7ec0caac-01fb-4f91-a4f2-0a9dd48f8af7访问密钥AK (Access Key Id)VAODAIIJGPUAYTJRRLODSK (Secret Access Key)ZHN49c6bpwDiQvPqKJ5CxutJxqc04Glt9xSzxYWi项目ID所属区域中国华北区1项目cn-north-1项目IDbd67aaead60940d688b872c31bdc653b区域和Endpoint区域名称中国华北区1Endpointdms-kafka.cn-north-1.myhuaweicloud.comDNSDNS服务器IP华北:100.125.1.250华东:100.125.17.29华南:100.125.1.250
-
[*](可选)配置DNS。公网无法直接访问DMS,必须要先创建ECS,在ECS上才可以访问DMS。新创建的ECS不需要再配置DNS,如果使用已有的ECS需要配置DNS。[*]华北区的DNS IP:100.125.1.250 [*]华东区的DNS IP:100.125.17.29 [*]华南区的DNS IP:100.125.1.250 [*]参考表1的配置示例的配置项。表1 dms.client.properties参数说明 参数说明dms.server.ipDMS服务端的地址,配置为IP或者域名。华北区域名:dms-tcp.cn-north-1.myhuaweicloud.com华东区域名:dms-tcp.cn-east-2.myhuaweicloud.com华南区域名:dms-tcp.cn-south-1.myhuaweicloud.comdms.server.portDMS服务TCP端口,配置为60010。dms.client.blocked.worker.num执行阻塞callback的线程数,默认为-1,小于0则默认使用CPU核数两倍。dms.client.conn.timeout连接超时时间,单位为毫秒,默认6000dms.client.reconn.attempt.times连接重试次数,默认3次。dms.client.reconn.attempt.interval连接重试间隔,单位为毫秒,默认3000。dms.client.request.timeout请求超时时间,单位为毫秒,默认60000。dms.client.start.timeout启动超时时间,单位为毫秒,默认60000。dms.client.project.idproject id,获取方法参见获取project id。dms.client.access.keyaccess key,获取方法参见获取AK/SK。dms.client.secret.keysecret key,获取方法参见获取AK/SK。[*]开始编写代码,API接口请参考获取SDK中的dms.sdk.api.chm文档。
-
本章节以新建名为“tcpdemo”的Maven Project为例。操作步骤[*]打开Eclipse,建议使用4.6以上版本,新建一个Maven Project,工程名自定义,这里以tcpdemo为例。[*]单击“Finish”。 [*]导入DMS TCP SDK的jar包。 [list=a] [*]右键单击新建的工程“tcpdemo”,新建一个Folder,命名为libs。 [*]将dms.sdk-1.0.0.jar和dms.protocol-1.0.0.jar复制到libs目录下。 [*]在pom.xml文件中增加如下行,将DMS TCP SDK的jar包导入Maven仓库。 com.huawei.middleware.dms dms.protocol 1.0.0 jar system ${basedir}/libs/dms.protocol-1.0.0.jar com.huawei.middleware.dms dms.sdk 1.0.0 jar system ${basedir}/libs/dms.sdk-1.0.0.jar [*]保存“pom.xml”。 [*]如果没有自动导入第三方依赖包,请参考“DmsTcpDemo示例”将third_lib.zip中的包导入Maven仓库。
-
如果您还没有下载SDK,请访问http://developer.huaweicloud.com/sdk/java/dms-tcp.html下载SDK压缩包。下载dms.sdk.zip压缩包,即为DMS TCP SDK开发包,包含如下文件:[*]dms.sdk-1.0.0.jar:DMS TCP SDK包 [*]dms.protocol-1.0.0.jar: DMS TCP SDK包 [*]dms.client.properties:配置文件 [*]README.txt:发布说明文件 [*]third_lib.zip:DMS TCP SDK依赖的第三方jar包 [*]dms.sdk.api.chm:API接口参考
-
本帖最后由 云彩飞扬 于 2018-3-19 14:47 编辑 开发环境Eclipse:Eclipse 3.6.0及以上版本,可至Eclipse官方网站下载。JDK:Java Development Kit 1.8.111及以上版本,可至Oracle官方下载页面下载。Maven:Apache Maven 3.0.3及以上版本。获取队列ID和消费组的ID使用SDK接口访问DMS服务,需要先创建队列和消费组,步骤如下:[*]登录管理控制台。 [*]单击“服务列表”,选择“应用服务 > 分布式消息服务”,进入分布式消息服务信息页面。 [*]单击左侧菜单栏的“队列管理”。 [*]在“队列管理”页面,单击页面上方的“创建队列”。 每个用户默认最多可以创建5个队列,您可以在“删除队列”按钮上面看到您还可以创建多少个队列。如果您想创建更多队列,请联系客服申请增加配额。 [*]填写队列名称和描述信息。 表1 参数说明参数说明当前区域表示当前创建队列的区域。队列名称队列的名称,必须唯一。DMS为您自动生成了队列名称,您可以根据需要修改,队列名称只能包含a~z,A~Z,0-9,-,_,长度是[1,64]。创建队列后不能修改名称。队列类型[*]普通队列:包括分区有序和全局有序 [*]AMQP队列:使用AMQP协议的队列。Advanced Message Queuing Protocol,是统一消息服务的应用层标准的高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。 [*]Kafka队列:支持使用开源kafka客户端进行生产消息和消费消息,支持高吞吐和高可靠两种模式。队列模式队列类型为普通队列时,队列模式取值范围: [*]分区有序:的普通队列具有更高的并发性能,不保证先入先出(FIFO)的严格顺序。 [*]全局有序:的普通队列保证消息先入先出(FIFO)的严格顺序。 队列类型为Kafka队列时,队列模式取值范围: [*]高吞吐:消息副本异步落盘,具有较高的性能 [*]高可靠:消息多副本同步落盘,保证消息的可靠性。是否开启死信仅队列类型为普通队列时,才有该参数。是否开启死信消息,死信消息是指无法被正常消费的消息。当达到最大消费次数仍然消费失败后,DMS会将该条消息转存到死信队列中,有效期为72小时,用户可以根据需要对死信消息进行重新消费。消费死信消息时,只能消费该消费组产生的死信消息。全局有序的队列的死信消息依然按照先入先出(FIFO)的顺序存储在死信队列中。默认值:关闭。消息保留时长(小时)仅Kafka队列才有该参数。指定kafka队列的消息保存时间,超过该时长的消息将会被删除,删除的消息无法被消费。取值范围:1-72,必须为整数。默认值:72小时。最大消费次数仅开启死信时,才有该参数。消息进入死信队列前可重复接收次数。取值范围:1~100默认值:3描述(可选)队列描述不能包含,长度是[0,160]。图1 创建队列[*]单击“确定”。创建队列完成。 [*]单击队列名称,显示队列详情,获取队列ID,如图2所示。 图2 获取队列ID [*]单击“创建消费组”。进入“创建消费组”页面。 [*]填写消费组的名称。 DMS为您自动生成了消费组名称,您可以根据需要修改,消费组的名称只能包含a~z,A~Z,0~9,-,_,长度是[1,32]。同个队列的消费组名称不能重复。 [*]单击“确定”。创建消费组完成,获取消费组ID,如图3所示。 图3 获取消费组ID 获取project id在调用接口的时候,需要填入项目编号project_id,所以需要先在管理控制台上获取到项目编号,步骤如下:[*]注册并登录管理控制台。 [*]单击用户名,在下拉列表中单击“我的凭证”。 [*]在“我的凭证”页面的“项目列表”中查看项目ID。 图4 获取项目ID 获取AK/SK[*]登录管理控制台。 [*]单击用户名,在下拉列表中单击“我的凭证”。 [*]在“我的凭证”页,单击“管理访问密钥”页签。 [*]单击“新增访问密钥”,进入“新增访问密钥”页面。 [*]输入当前用户的登录密码。 [*]通过邮箱或者手机进行验证,输入对应的验证码。 [*]单击“确定”,下载访问密钥。 说明:为防止访问密钥泄露,建议您将其保存到安全的位置。 [*]保存文件到本地,从下载的credentials.csv文件中获取“Access Key Id”和“Secret Access Key”。 获取区域和Endpoint Region域名端口号中国华北区1dms-tcp.cn-north-1.myhuaweicloud.com60010中国华东区2dms-tcp.cn-east-2.myhuaweicloud.com60010中国华南区1dms-tcp.cn-south-1.myhuaweicloud.com60010购买弹性云服务器使用DMS TCP SDK之前,需要购买弹性云服务器ECS,否则公网无法直接访问DMS,购买方法请参考“购买弹性云服务器”。说明:弹性IP用于登录弹性云服务器,以及上传文件等。配置内网DNS。说明:新创建的ECS不需要再配置DNS,如果使用已有的旧的ECS,则需要配置DNS的IP。华北区的DNS IP:100.125.1.250华东区的DNS IP:100.125.17.29华南区的DNS IP:100.125.1.250示例如下:环境信息汇总表2 环境信息汇总类型项目收集的信息(以下为示例,请根据实际情况替换)弹性云服务器弹性IP114.115.141.228用户名huaweicloud密码password分布式消息服务队列名称my-tcp-queue队列ID5964181e-b67e-4d35-9281-a58c352abda6队列类型普通队列消费组名称my-tcp-group消费组IDg-c861aa48-a082-48ff-bc9d-ff36fe7aed38访问密钥AK (Access Key Id)VAODAIIJGPUAYTJRRLODSK (Secret Access Key)ZHN49c6bpwDiQvPqKJ5CxutJxqc04Glt9xSzxYWi项目ID所属区域中国华北区1项目cn-north-1项目IDbd67aaead60940d688b872c31bdc663b区域和Endpoint区域名称中国华北区1Endpointdms-tcp.cn-north-1.myhuaweicloud.com端口号60010DNSDNS服务器IP华北:100.125.1.250华东:100.125.17.29华南:100.125.1.250
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中
热门标签