开发指南

开发指南(REST)

目的

IMS是Inspur Message Service Platform的简称,中文名称为云消息服务平台,是云和大数据时代的一种高性能消息中间件,以云服务和集群方式对外提供高性能和高可靠的消息队列服务,支撑大数据采集、传输、汇聚和交换,大数据实时处理和微服务处理架构。

IMS REST接口可以很方便的操作IMS的Topic,并进行收发消息操作。REST可以通过不同开发语言编写,比如C/C++、C#、JAVA等语言编写;也可以通过不同脚本编写,比如Python、Shell、Curl等方式进行编写。

本文档对基于云消息服务平台IMS产品的API(REST)如何进行二次开发进行了详细说明和描述,为开发者提供开发指导。

使用对象

该文档是云消息服务平台IMS产品的API(REST)开发指南。

该文档使用对象为:使用IMS的开发人员。

术语定义

IMS:IMS是Inspur Message Service Platform的简称,中文名称为云消息服务平台,是云和大数据时代的一种高性能消息中间件,以云服务和集群方式对外提供高性能和高可靠的消息队列服务,支撑大数据采集、传输、汇聚和交换,大数据实时处理和微服务处理架构。

Topic:Topic是消息中间件里的一个重要的概念,每一个Topic代表了一类消息,有了多个Topic,就可以对消息进行归类与隔离。

CMS:CMS是Cloud Message Server的简称,中文名称为云消息服务器,是IMS的基础和核心组件,负责消息的存取和管理操作,狭义上说的IMS就是指云消息服务器CMS,其程序名称就叫IMS。

IMS LN:IMS LN是Cloud Message Service Platform Load Balance Node的简称,中文名称为云消息服务平台负载均衡节点,是IMS企业版的必须组件,通过它对外开放的IP和端口统一对外提供服务。

IMS HTTP:IMS HTTP作为IMS 的一个代理组件,为IMS云消息服务提供HTTP1.1协议接入,具有高性能、高并发、高吞吐量等特点。用户可以使用HTTP1.1协议POST/GET请求实现和IMS云消息服务器收发消息。

IMS HTTPS代理:IMS HTTPS 代理作为IMS的一个安全代理组件,是基于IMS HTTP基础之上,确保用户在HTTP传输数据的安全可靠。

REST:Representational State Transfer,简称REST,即表现层状态转化,是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

概述

IMS是一种高效、可靠、安全、便捷、可弹性扩展的分布式消息服务系统,它的目标是高可靠地在一个云消息服务引擎上可以支持成千上万的应用7*24不间断并发访问,在廉价PC服务器集群上支持每秒上亿条的消息存取服务,支持随业务量需要动态增加或减少计算资源节点,同时要确保基于云消息服务平台的应用开发和管理简单易使用。

IMS 以Topic形式提供消息的存取,IMS REST接口可以很方便的操作IMS的Topic,并进行收发消息操作。

REST提供实现访问有多种,本文以HTTP Client 4.5为例介绍IMS REST API如何开发,包括IMS HTTP(REST)开发和IMS HTTPS(REST)开发两部分,IMS HTTP(REST)开发是按HTTP协议进行开发,IMS HTTPS(REST)开发是按HTTPS协议进行开发。

开发说明

本章使用IMS HTTP(REST)和IMS HTTPS (REST)接口向IMS Topic中发送和接收消息为例介绍开发流程,其他接口使用可参考《云消息服务平台IMS V7.0.0 API手册(REST)》第6章的应用举例。

开发环境准备

JDK安装

JDK是整个Java的核心,包括了JAVA运行环境,JAVA工具和JAVA基础的类库。Apache 的HTTP Client 4.5依赖JDK环境,当前对JDK的版本需求是JDK1.7及JDK1.7以上版本。

首先检查部署环境是否已安装相应版本JDK,若无,则参考《JDK1.8 安装部署手册》进行安装部署。

安装完成后,需要验证正确安装JDK,如果是winodws系统,需打开“命令提示符”,或者在运行窗口,输入“cmd”,打开了DOS窗口,分别输入命令java -version与命令javac –version,如果输出各自的版本信息,则安装成功,否则请按照《JDK1.8安装部署手册》重新安装配置。如果是linux系统,在命令窗口中输入java -version与命令javac –version。

Eclipse安装

请到Eclipse官网下载Eclipse3.6以上版本进行安装,本文以Eclipse Neon.2版本进行说明:

下载后,解压压缩包eclipse-SDK-4.6.2-win32-x86_64.zip,不需要安装,解压文件到桌面,产生eclipse文件夹。

下载HTTP Client 4.5包

首先,登录http://hc.apache.org/downloads.cgi网站,下载二进制包4.5.5,压缩包保存到桌面。

桌面解压httpcomponents-client-4.5.5-bin.tar.gz安装包,不需要安装,如下图所示解压到当前目录.

创建 IMS Topic

本文下面的演示例子使用test.topic进行存取消息,请在IMS 中创建test.topic,具体参考《云消息服务平台IMS V7.0.0管理员使用手册》。

下载客户端证书

IMS HTTPS(REST) 开发需要证书,IMS HTTP(REST)开发不需要证书,可忽略此步。

用SFTP工具登录到cmsphttps用户,下载证书目录cert_tools到桌面。

注意:此处只下载客户端自己证书,包括InspurCmspCA.crt 和client.p12两个证书即可,为确保服务器证书不被窃取,建议以邮件或优盘方式,从服务器取得客户端证书发送给用户。

导入客户端证书

IMS HTTPS(REST) 开发需要证书,IMS HTTP(REST)开发不需要证书,可忽略此步。

先用JDK提供的keytool命令把InspurCmspCA.crt证书导入java库中,具体步骤如下:

winodws系统,需打开“命令提示符”,或者在运行窗口,输入“cmd”,打开了DOS窗口,cd 到C:\Users\gedy\Desktop\cert_tools\certs目录下,输入下面的命令: keytool -import -alias JavaInspurCmspCA -file InspurCmspCA.crt -keystore JavaInspurCmspCA,并连续2次输入相同密码:123456,再输入是。

创建工程

打开eclipse,找到桌面上的eclipse目录下eclipse.exe,双击eclipse.exe文件打开eclipse。

点击菜单栏File -> New -> JavaProject,创建Java项目。

在Project name一栏中输入“CMSPRestExample”,并选择安装的JDK,然后点击Finish完成项目创建。

在CMSPRestExample项目上单击鼠标右键,选择NewàFloder。

在弹出的对话框Fold name一栏中输入lib,并点击Finish完成文件夹创建。

将实验材料中的commons-logging-1.2.jar 、httpclient-4.5.5.jar和httpcore-4.4.9.jar复制到lib目录下。

在CMSPRestExample项目上单击鼠标右键,在弹出的菜单中选择Properties选项。

在“Properties for CMSPRestExample”的弹出窗中选择“Java Build Path”,在右侧的tab页中选择“Libraries”,点击“Add JARS”,如下图所示。

在弹出的对话框中展开CMSPRestExample目录下的lib文件夹,选中httpclient-4.5.5.jar和httpcore-4.4.9.jar,点击“OK”,完成依赖包的添加。

IMS REST中API说明

本章节主要对IMS HTTP(REST)发送消息接口和IMS HTTPS(REST)接收消息接口进行描述。

IMS HTTP(REST)发送消息接口

功能描述

通过HTTP协议,向IMS中指定的主题topic中发送消息。

接口信息**

表 6‑1 接口信息表

API**名称** URL 协议 方法 参数格式
HTTP协议发送消息接口 http://IP:PortT/cmsp/message? token=MTUyNDYyNDM2My45MDMxNi45MzU1NDYyOTKEsGWEBK1s14BDkS4AWJMZUzpfoqIt7vp1BDBlH5NAZg&topic=topic1 HTTP POST 名值对以&分割

输入参数

表 6‑2 接口输入参数表

参数名称 说明 参数值
token IMS HTTP提供的token串 参考《云消息服务平台IMS V7.0.0管理员使用手册》
topic 使用IMS Topic对应的主题名 参考《云消息服务平台IMS V7.0.0管理员使用手册》

返回值

成功:200 OK。

错误:500 Internal Server Error。

错误码说明**

具体错误码和错误信息放入HTTP应答Body中,以Json形式 “{"errcode":-10008,"errmsg":"server can not find token!"}”返回。其中,errcode=对应错误码,errmsg=对应错误信息。错误码参考《云消息服务平台 IMS V7.0.0 API手册(REST)表7-1》或对应《云消息服务平台IMS V7.0.0 FAQ》文档。

IMS HTTPS(REST)接收消息接口

功能描述

通过HTTPS协议,向IMS中指定的主题topic中发送一条消息。

接口信息

表 6‑3 接口信息表

API**名称** URL 协议 方法 参数格式
HTTPS协议发送消息接口 https://IP:Port/cmsp/message? token=MTUyNDYyNDM2My45MDMxNi45MzU1NDYyOTKEsGWEBK1s14BDkS4AWJMZUzpfoqIt7vp1BDBlH5NAZg&topic=topic1 HTTPS GET 名值对以&分割

输入参数

表 6‑4 接口输入参数表

参数名称 说明 参数值
token IMS HTTP提供的token串 参考《云消息服务平台IMS V7.0.0管理员使用手册》
topic 使用IMS Topic对应的主题名 参考《云消息服务平台IMS V7.0.0管理员使用手册》

返回值**

成功:200 OK。

错误:500 Internal Server Error。

错误码说明**

具体错误码和错误信息放入HTTP应答Body中,以Json形式返回“{"errcode":-10008,"errmsg":"server can not find token!"}”回。其中,errcode=对应错误码,errmsg=对应错误信息。错误码参考《云消息服务平台 IMS V7.0.0 API手册(REST)表7-1》或对应《云消息服务平台IMS V7.0.0 FAQ》文档。

IMS HTTP(REST)开发流程

主要介绍如何通过IMS HTTP(REST) 接口,向IMS test.topic中发送一条消息,具体流程如下:

创建PostMessage类

在CMSPRestExample项目上单击鼠标右键,选择NewàOther…。

在弹出的界面中选择Class,然后点击next,进入类创建界面。

在Package一栏中输入包名:com.inspur.IMS.rest.demo,在Name一栏中输入PostMessage,然后单击Finish完成接口的创建。

点击Finish后,项目的目录结构如下图所示

编写main()方法,代码如下:

package com.inspur.cmsp.rest.demo;

public class PostMessage {

public static void main(String args[]){

}

}

编写流程代码

IMS HTTP(REST)开发主要包含四部分:建立HTTP连接、定义HTTP响应请求处理、指定REST URL并发送请求和消息、关掉HTTP连接。

\1. 建立HTTP连接:指定IP和PORT,向IMS HTTP建立一条HTTP链路,具体代码如下:

System.out.println("Useage: IP:Port TopicName");

//指定IMS HTTP 服务器的IP和端口

String IP_PORT = "10.16.2.2:1326";

//指定IMS Topic名称

String argTopic= "test.topic";

if(args.length>=1){

​ IP_PORT = args[0];

}

if(args.length>=2){

​ argTopic = args[1];

}

//1.建立Http连接

CloseableHttpClient http = HttpClients.createDefault();

\2. 定义HTTP 响应请求处理:定义HTTP响应后的处理方式,打印HTTP响应码,并输出HTTP Body信息,具体代码如下:

//2.定义Http 响应请求处理

ResponseHandler responseHandler = new ResponseHandler() {

@Override

​ public StatusLine handleResponse(HttpResponse response) throws ClientProtocolException, IOException {

​ HttpEntity entity = response.getEntity();

​ StatusLine sl = response.getStatusLine();

​ System.out.print(sl);

​ if (entity.getContentLength() < 200)

​ System.out.print("," + EntityUtils.toString(entity));

​ System.out.println("");

​ return sl;

​ }

};

\3. 指定REST URL,发送请求和消息:指定REST发送消息URL 和消息体,发送HTTP POST到IMS HTTP 服务器,具体代码如下:

//3.指定REST URL,并发送请求

String URL= "http://"+IP_PORT+"/cmsp/message? token=MTUyNDYyNDM2My45MDMxNi45MzU1NDYyOTKEsGWEBK1s14BDkS4AWJMZUzpfoqIt7vp1BDBlH5NAZg&topic="+argTopic;

byte[] postBody = "this is one cmsp message sent by http protocal.".getBytes();

HttpPost httpPost ;

HttpEntity entity = new ByteArrayEntity(postBody);

StatusLine sl = null;

try {

​ for(int i=0;i<10;i++){

​ //3.1设置URL

​ httpPost = new HttpPost(URL);

​ httpPost.setEntity(entity);

​ //3.3发送消息

​ sl = http.execute(httpPost, responseHandler);

​ }

} catch (ClientProtocolException e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

} catch (IOException e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

}

\4. 关掉HTTP连接:发送完消息,关掉HTTP连接,具体代码如下:

//4.关掉HTTP连接

finally{

​ try {

​ http.close();

​ } catch (IOException e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

​ }

}

\5. 完整的示例代码如下:

package com.inspur.cmsp.rest.demo;

import java.io.IOException;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.StatusLine;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.ResponseHandler;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.ByteArrayEntity;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.util.EntityUtils;

/**

  • 以Rest方式从IMS test.topic中发送10条消息

  • @author gedy

    *

    */

public class PostMessage{

​ /*

​ * 主函数,默认IP/Port不需要输入参数;也可以输入IP和Port,以空格分割

​ */

​ public static void main(String[] args) {

​ System.out.println("Useage: IP:Port TopicName");

​ //指定IMS HTTP 服务器的IP和端口

​ String IP_PORT = "10.16.2.2:1326";

​ //指定IMS Topic名称

​ String argTopic= "test.topic";

​ if(args.length>=1){

​ IP_PORT = args[0];

​ }

​ if(args.length>=2){

​ argTopic = args[1];

​ }

​ //1.建立HTTP连接

​ CloseableHttpClient http = HttpClients.createDefault();

​ //2.定义HTTP 响应请求处理

​ ResponseHandler responseHandler = new ResponseHandler() {

​ @Override

​ public StatusLine handleResponse(HttpResponse response) throws ClientProtocolException, IOException {

​ HttpEntity entity = response.getEntity();

​ StatusLine sl = response.getStatusLine();

​ System.out.print(sl);

​ if (entity.getContentLength() < 200)

​ System.out.print("," + EntityUtils.toString(entity));

​ System.out.println("");

​ return sl;

​ }

​ };

​ //3.指定REST URL,并发送请求

​ String URL = "http://"+IP_PORT+"/cmsp/message? token=MTUyNDYyNDM2My45MDMxNi45MzU1NDYyOTKEsGWEBK1s14BDkS4AWJMZUzpfoqIt7vp1BDBlH5NAZg&topic="+argTopic;

​ byte[] postBody = "this is one cmsp message sent by http protocal.".getBytes();

​ HttpPost httpPost ;

​ HttpEntity entity = new ByteArrayEntity(postBody);

​ StatusLine sl = null;

​ try {

​ for(int i=0;i<10;i++){

​ //3.1设置URL

​ httpPost = new HttpPost(URL);

​ httpPost.setEntity(entity);

​ //3.3发送消息

​ sl = http.execute(httpPost, responseHandler);

​ }

​ } catch (ClientProtocolException e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

​ } catch (IOException e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

​ }

​ //4.关掉HTTP连接

​ finally{

​ try {

​ http.close();

​ } catch (IOException e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

​ }

​ }

}

}

至此,完成CMSP HTTP(REST)的代码研发。接下来,运行项目,查看返回结果。

运行并查看结果

在PostMessage类上单击鼠标右键,选择Run As->Java Application。

IMS HTTPS(REST)开发流程

主要介绍如何通过IMS HTTPS(REST) 接口,从IMS test.topic中接收消息,具体流程如下:

创建HttpsGetMessage类

在CMSPRestExample项目上单击鼠标右键,选择NewàOther…。

在弹出的界面中选择Class,然后点击next,进入类创建界面。

在Package一栏中输入包名:com.inspur.cmsp.rest.demo,在Name一栏中输入HttpsGetMessage,然后单击Finish完成接口的创建。

点击Finish后,项目的目录结构如下图所示。

编写main()方法,代码如下:

package com.inspur.cmsp.rest.demo;

public class HttpsGetMessage{

public static void main(String args[]){

}

}

编写流程代码

IMS HTTPS(REST)开发主要包含四部分:建立HTTPS连接并指定证书、指定加密算法、定义HTTPS响应请求处理、指定REST URL并发送请求和收取消息、关掉HTTPS连接。

\1. 建立HTTPS连接并指定证书:指定IP、PORT和证书,向IMS HTTPS建立一条HTTPS链路,具体代码如下:

//指定IMS HTTPS 服务器的IP和端口

String IP_PORT = "10.16.2.2:1328";

//指定IMS Topic名称

String argTopic= "test.topic";

if(args.length>=1){

​ IP_PORT = args[0];

}

if(args.length>=2){

​ argTopic = args[1];

}

//1.建立HTTPS连接,并指定证书

CloseableHttpClient http = null;

SSLContext sslcontext = null;

try {

​ /1.1客户端有证书,服务端有证书,且服务端配置需要验证客户端/

​ sslcontext = SSLContexts.custom().loadKeyMaterial(new File("C:/Users/gedy/Desktop/cert_tools/certs/client.p12"), "123456".toCharArray(), "123456".toCharArray())

​ /*1.2双向认证,客户端用InspurCmspCA.crt证书认证服务端个人证书,同时服务端也用InspurCmspCA.crt证书认证客户端个人证书,

而JavaInspurCmspCA与InspurCmspCA.crt是同一个ca证书,jdk 提供keytool导入InspurCmspCA.crt证书取了个别名JavaInspurCmspCA/

.loadTrustMaterial(new File("C:/Users/gedy/Desktop/cert_tools/certs/JavaInspurCmspCA"), "123456".toCharArray(),

new TrustStrategy() {

​ //1.3信任所有

​ @Override

​ public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {

​ //System.out.println("isTrusted...........authType="+authType);

​ //1.4必须是fasle,ture 不对服务端用JavaInspurCmspCA证书对server个人证书进行验证

​ return false;

​ }

​ })

.build();

} catch (Exception e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

}

\2. 指定加密算法:指定HTTPS链路使用的加密算法,具体代码如下:

//2. 指定 TLSv1 protocol

SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(

​ sslcontext,

​ new String[] { "TLSv1" },

​ null,

​ SSLConnectionSocketFactory.getDefaultHostnameVerifier());

http = HttpClients.custom().setSSLSocketFactory(sslsf).build();

HttpClientContext context = HttpClientContext.create();

\3. 定义HTTPS 响应请求处理:定义HTTPS响应后的处理方式,打印HTTPS响应码,并输出HTTPS Body信息,具体代码如下:

//3.定义HTTPS 响应请求处理

ResponseHandler responseHandler = new ResponseHandler() {

@Override

​ public StatusLine handleResponse(HttpResponse response) throws ClientProtocolException, IOException {

​ HttpEntity entity = response.getEntity();

​ StatusLine sl = response.getStatusLine();

​ System.out.print(sl);

​ if (entity.getContentLength() < 200){

​ //3.1ContentLength为0代表,Cmsp Topic中没有消息

​ if(entity.getContentLength()==0)

​ System.out.print(", cmsp server has no message");

​ else

​ System.out.print("," + EntityUtils.toString(entity,Charset.defaultCharset()));

​ }

​ System.out.println("");

​ return sl;

​ }

};

\4. 指定REST URL,发送请求和收取消息:指定REST发送消息URL 和消息体,发送HTTP GET到IMS HTTP 服务器,具体代码如下:

//4.指定REST URL,并发送请求

String URL = "https://"+IP_PORT+"/cmsp/message? token=MTUyNDYyNDM2My45MDMxNi45MzU1NDYyOTKEsGWEBK1s14BDkS4AWJMZUzpfoqIt7vp1BDBlH5NAZg&topic="+argTopic;

HttpGet httpGet;

StatusLine sl = null;

try {

​ for(int i=0;i<3;i++){

​ //4.1设置URL

​ httpGet = new HttpGet(URL);

​ //4.2接收消息

​ sl = http.execute(httpGet, responseHandler,context);

​ }

} catch (ClientProtocolException e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

} catch (IOException e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

}

\5. 关掉HTTPS连接:收取完消息,关掉HTTPS连接,具体代码如下:

//5.关掉HTTPS连接

finally{

​ try {

​ http.close();

​ } catch (IOException e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

​ }

}

\6. 完整的示例代码如下:

import java.io.File;

import java.io.IOException;

import java.nio.charset.Charset;

import java.security.cert.CertificateException;

import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.StatusLine;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.ResponseHandler;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.protocol.HttpClientContext;

import org.apache.http.conn.ssl.SSLConnectionSocketFactory;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.ssl.SSLContexts;

import org.apache.http.ssl.TrustStrategy;

import org.apache.http.util.EntityUtils;

/**

  • 以证书Rest方式从IMS test.topic中收取10条消息

  • @author gedy

    *

    */

public class HttpsGetMessage{

​ /*

​ * 主函数,默认IP/Port不需要输入参数;也可以输入IP和Port,以空格分割

​ */

​ public static void main(String[] args) {

​ System.out.println("Useage: IP:Port TopicName");

​ //指定IMS HTTPS 服务器的IP和端口

​ String IP_PORT = "10.16.2.2:1328";

​ //指定IMS Topic名称

​ String argTopic= "test.topic";

​ if(args.length>=1){

​ IP_PORT = args[0];

​ }

​ if(args.length>=2){

​ argTopic = args[1];

​ }

​ //1.建立HTTPS连接,并指定证书

​ CloseableHttpClient http = null;

​ SSLContext sslcontext = null;

​ try {

​ /1.1客户端有证书,服务端有证书,且服务端配置需要验证客户端/

​ sslcontext = SSLContexts.custom().loadKeyMaterial(new File("C:/Users/gedy/Desktop/cert_tools/certs/client.p12"), "123456".toCharArray(), "123456".toCharArray())

​ /*1.2双向认证,客户端用InspurCmspCA.crt证书认证服务端个人证书,同时服务端也用InspurCmspCA.crt证书认证客户端个人证书,

而JavaInspurCmspCA与InspurCmspCA.crt是同一个ca证书,jdk 提供keytool导入InspurCmspCA.crt证书取了个别名JavaInspurCmspCA/

​ .loadTrustMaterial(new File("C:/Users/gedy/Desktop/cert_tools/certs/JavaInspurCmspCA"), "123456".toCharArray(),

​ new TrustStrategy() {

​ //1.3信任所有

​ @Override

​ public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {

​ //System.out.println("isTrusted...........authType="+authType);

​ //1.4必须是fasle,ture 不对服务端用JavaInspurCmspCA证书对server个人证书进行验证

​ return false;

​ }

​ })

​ .build();

​ } catch (Exception e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

​ }

​ //2. 指定 TLSv1 protocol

​ SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(

​ sslcontext,

​ new String[] { "TLSv1" },

​ null,

​ SSLConnectionSocketFactory.getDefaultHostnameVerifier());

​ http = HttpClients.custom().setSSLSocketFactory(sslsf).build();

​ HttpClientContext context = HttpClientContext.create();

​ //3.定义HTTPS 响应请求处理

​ ResponseHandler responseHandler = new ResponseHandler() {

​ @Override

​ public StatusLine handleResponse(HttpResponse response) throws ClientProtocolException, IOException {

​ HttpEntity entity = response.getEntity();

​ StatusLine sl = response.getStatusLine();

​ System.out.print(sl);

​ if (entity.getContentLength() < 200){

​ //3.1ContentLength为0代表,Cmsp Topic中没有消息

​ if(entity.getContentLength()==0)

​ System.out.print(", cmsp server has no message");

​ else

​ System.out.print("," + EntityUtils.toString(entity,Charset.defaultCharset()));

​ }

​ System.out.println("");

​ return sl;

​ }

​ };

​ //4.指定REST URL,并发送请求

​ String URL = "https://"+IP_PORT+"/cmsp/message? token=MTUyNDYyNDM2My45MDMxNi45MzU1NDYyOTKEsGWEBK1s14BDkS4AWJMZUzpfoqIt7vp1BDBlH5NAZg&topic="+argTopic;

​ HttpGet httpGet;

​ StatusLine sl = null;

​ try {

​ for(int i=0;i<3;i++){

​ //4.1设置URL

​ httpGet = new HttpGet(URL);

​ //4.2接收消息

​ sl = http.execute(httpGet, responseHandler,context);

​ }

​ } catch (ClientProtocolException e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

​ } catch (IOException e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

​ }

​ //5.关掉HTTPS连接

​ finally{

​ try {

​ http.close();

​ } catch (IOException e) {

​ // TODO Auto-generated catch block

​ e.printStackTrace();

​ }

​ }

}

}

至此,完成IMS HTTPS(REST)的代码研发。接下来,运行项目,查看返回结果。

运行并查看结果

在HttpsGetMessage类上单击鼠标右键,选择Run As->Java Application。

开发指南(JAVA)

目的

IMS是Inspur Message Service Platform的简称,中文名称为云消息服务平台,是云和大数据时代的一种高性能消息中间件,以云服务和集群方式对外提供高性能和高可靠的消息队列服务,支撑大数据采集、传输、汇聚和交换,大数据实时处理和微服务处理架构。

IMS JAVA接口可以很方便的操作IMS的Topic,并进行收发消息操作。

本文档对基于IMS产品如何进行二次开发进行了详细说明和描述,为开发者提供开发指导。

使用对象

该文档是IMS产品的API(JAVA)的开发指南。

该文档使用对象为:使用IMS的开发人员。

术语定义

IMS:IMS是云和大数据时代的一种高性能消息中间件,以云服务和集群方式对外提供高性能和高可靠的消息队列服务,支撑大数据采集、汇聚、交换,大数据实时处理和微服务处理架构。

Topic:Topic中文名称为主题,Topic是消息中间件里的一个重要的概念,每一个Topic代表了一类消息,有了多个Topic,就可以对消息进行归类与隔离。

CMS:云消息服务器CMS是IMS的基础和核心组件,负责消息的存取和管理操作,一般说的IMS就是指云消息服务器CMS,其程序名称就叫IMS。

IMSLN:IMS LN是Inspur Message Service Platform Load Balance Node的简称,中文名称为云消息服务平台负载均衡节点,是IMS企业版的必须组件,通过它对外开放的IP和端口统一对外提供服务。

概述

IMS JAVA API可以对IMS进行主题、用户、消息等资源管理和操作,对主题和用户可以进行创建、删除、编辑操作,对消息可以进行收发,收发方式有多种,有同步方式、异步方式、事务方式、成组方式、偏移量方式等。

IMS JAVA API 使用模式有两种,网络方式和本地方式,网络方式一种客户端方式,IMS 和JAVA应用程序不需要再同一台机器上,JAVA 应用程序通过网络方式可以管理和操作IMS,具备轻量、易用特点;本地方式是需要IMS 和JAVA应用程序需要再同一台机器上,直接管理和操IMS,具备高性能、高可靠特点。

IMS JAVA API是跨平台的,原则是Linux内核2.6以上,64位系统和Windows7 以上64位系统都支持,目前经过测试的有RedHat 5.5及以上 64位、CentOS 5.5及以上 64位、Windows10 64位三种操作系统,建议用户也使用这三种操作系统或以上版本。

开发说明

本章使用IMS JAVA API接口向IMS Topic中发送和接收消息为例介绍开发流程,其他接口使用可参考《云消息服务平台IMS V7.0.0API手册(JAVA)》第5.3节的应用举例。

开发环境准备

JDK安装

JDK是整个Java的核心,包括了JAVA运行环境,JAVA工具和JAVA基础的类库。IMS JAVA API接口开发依赖JDK环境,当前对JDK的版本需求是JDK1.7及JDK1.7以上版本。

首先检查部署环境是否已安装相应版本JDK,若无,则参考《JDK1.8 安装部署手册》进行安装部署。

安装完成后,需要验证正确安装JDK,如果是winodws系统,需打开“命令提示符”,或者在运行窗口,输入“cmd”,打开了DOS窗口,分别输入命令java -version与命令javac –version,如果输出各自的版本信息,则安装成功,否则请按照《JDK1.8安装部署手册》重新安装配置。如果是linux系统,在命令窗口中输入java -version与命令javac –version。

Eclipse安装

请到Eclipse官网下载Eclipse3.6以上版本进行安装,本文以Eclipse Neon.2版本进行说明:

下载后,解压压缩包eclipse-SDK-4.6.2-win32-x86_64.zip,并解压到桌面。

创建 IMS Topic

本文下面的演示例子使用Topic主题t0进行存取消息,请在IMS 中创建t0,标准版使用cmspManager –c –T t0创建,企业版使用cloud0cmd 127.0.0.1 Port(IMS启动端口) ‘cmspManager –c –T t0’创建。

创建工程

(1).打开eclipse,找到桌面上的eclipse目录下eclipse.exe,双击eclipse.exe文件打开eclipse。

(2).点击菜单栏File -> New -> JavaProject,创建Java项目,如下图所示:

(3).在Project name一栏中输入“IMSJavaApiExample”,并选择安装的JDK,然后点击Finish完成项目创建,如下图所示

(4).在IMSJavaApiExample项目上单击鼠标右键,选择NewàFloder,在弹出的对话框Fold name一栏中输入lib,并点击Finish完成文件夹创建

(5).将解压后imslib文件夹下的ims.jar复制到lib目录下,如下图所示

(6).在IMSJavaApiExample项目上单击鼠标右键,在弹出的菜单中选择Properties选项,在“Properties for IMSJavaApiExample”的弹出窗中选择“Java Build Path”,在右侧的tab页中选择“Libraries”,点击“Add JARS”,如下图所示

(7).在弹出的对话框中展开IMSJavaApiExample目录下的lib文件夹,选中ims.jar,点击“OK”,完成依赖包的添加。

开发流程

本章节从JAVA API客户端使用方式上进行开发流程的介绍,通过IMS JAVA API接口,向IMS主题t0发送一条消息。

在进行开发之前需要先安装IMS LN 和CMS组件,具体参考《云消息服务平台IMS V6.3.0管理员使用手册》。

假设IMS LN和CMS 组件安装在10.16.2.3机器上,端口分别为12015和9000,JAVA API客户端安装在10.16.2.1机器上,确保10.16.2.3的12015、9000端口和10.16.2.1 的端口能对外访问。

网络调用

如果是Windows开发,Windows和Linux下防火墙都要关闭,并且需要设置环境变量Path,其值指向imslib下jni_ims_connect.dll所在路径。

创建PutMessage类

(1).在IMSJavaApiExample项目上单击鼠标右键,选择NewàOther…。

(2).在弹出的界面中选择Class,然后点击next,进入类创建界面。

(3).在Package一栏中输入包名:com.inspur.ims.api.demo,在Name一栏中输入PutMessage,然后单击Finish完成接口的创建。

(4).点击Finish。

(5).编写main()方法,代码如下:

package com.inspur.cmsp.api.demo;

public class PuttMessage {

public static void main(String args[]){

}

}

编写流程代码

IMS JAVA API开发主要包含四部分:初始化连接参数、建立IMS连接、调用IMS JAVA API接口发送消息、关掉IMS连接。

\1. 初始化IMS连接的参数:指定IP和PORT,以及Topic主题名称和使用模式等,向IMS 建立一条链路,具体代码如下:

//1.初始化连接IMS的参数

CmspClient ims = new CmspClient("10.16.2.3",9000,"imqAdmin", "pw2017@GL!" ,"", 0);

\2. 建立IMS连接,具体代码如下:

//2.建立IMS连接

ims.connect();

\3. 调用IMS JAVA API接口putMq发送消息,具体代码如下:

//3.发送消息

ims.putMq("好");向主题t0中放消息

\4. 关掉IMS连接:发送完消息,关掉IMS连接,具体代码如下:

//4.关掉IMS连接

ims.disConnect();//断开连接IMS

完整的示例代码如下:

package com.test;

import com.inspur.cmspClient.CmspClient;

public class PutMq {

​ public static void main (String[]args) throws Exception

​ {

​ CmspClient ims = null;

​ try {

​ ims = new CmspClient("10.16.2.3",9000,"imqAdmin", "pw2017@GL!" ,"t0", 0);//初始化连接IMS的参数

​ ims.connect();//连接IMS

​ ims.putMq("好");向主题t0中放消息

​ ims.disConnect();//断开连接IMS

​ } catch (Exception e) {

​ e.printStackTrace();

​ }

​ }

}

至此,完成IMS JAVA API发送消息的代码研发。接下来,运行项目,查看返回结果。

运行并查看结果

(1).在PutMessage类上单击鼠标右键,选择Run As->Java Application。

(2).登录到10.16.2.3下IMS用户:

如果是Linux开发,其开发流程参考6.2.1.1到6.2.1.3小节,防火墙需要关闭,需要在.bash_profile文件下设置环境变量LD_LIBRARY_PATH和CLASSPATH,其值如下所示,

export LD_LIBRARY_PATH=$HOME/cmsplib/lib:$LD_LIBRARY_PATH

export CLASSPATH=$HOME/cmsplib/cmsp.jar:$CLASSPATH

export CMSP_LOCAL_IP=10.16.2.1

export LANG=zh_CN.gbk

本地调用

本地调用是Linux下开发,其开发流程参考6.2.1.1到6.2.1.3小节,需要在.bash_profile文件下设置环境变量CLASSPATH,其值如下所示,

export CLASSPATH=$HOME/cmsplib/cmspJni.jar:$CLASSPATH