北大青鸟java培训:短信通信服务的构建?

Python019

北大青鸟java培训:短信通信服务的构建?,第1张

随着互联网的不断发展,用户之间进行信息传递的方法和渠道也是越来越多了,而今天我们就一起来了解一下,宁夏北大青鸟http://www.kmbdqn.cn/介绍关于短信通信服务的构建都有哪些主要组成部分。

功能需求,主要是以下几点:一、稳定的发送保证:分为两部分,一个是服务本身的稳定性,另一个是短信服务提供商的稳定性.服务本身稳定是自己需要实现的,可以通过微服务平台已经有的一些工具保证,这里不进行展开.而另一个是需要外部保证的,外部需要保证的东西永远是脆弱的,所以不能仅仅使用一家服务商,需要使用多家.二、方便扩展:接着一点,服务商可能会有更换的需求,需要保证能够方便接入下架服务商.三、资产保护:短信相比邮件,微信通知等的一个不同是他花费比较高,一条的计价在3分左右,较长的短信会被拆为多条,如果不加限制进行保护很容易造成大量的资损.四、技术选型有了上面的需求之后就是选用什么技术了.基础的web服务就使用公司现有的即可.对于存储,因为涉及到发送信息和报告的记录,量可能会很大(其实上线之后也还好,3个月不到千万记录),统计时可能会按照某些发送内容统计,使用MySQL之类的可能会不太靠谱,选择使用ES.对于安全,一定需要做手机号每日发送量和发送频率等的限制,这个用redis可以较为轻松解决.五、接入多家服务商需要有多家服务商的接入,一家服务商可能同时供应多个短信功能.同时同一个短信功能需要轮流调用所有提供的服务商,并在一家失败后进行重试.也需要支持灵活的配置,可以禁用掉一些服务商,也可以方便加入新的。

六、发送限制设置关于手机号和ip的发送数量计数使用reids的incr配合时间戳相关的key就可以很简单完成,这里不累述这个.发送限制的话先要针对不同功能,因为不同功能的使用量是截然不同的,并且也有隔离的作用,一个功能超限不能影响其他功能.其次,发送的限制需要分层级,当达到了全局大限制后,就算没有超过单手机限制也不应该发出去了.七、使用的层次是:功能全局次数(次数)->单接入应用限制(次数/白名单/开关)->单手机/ip限制(次数/白名单/开关)->风控服务(开关),后次数要根据统计情况和业务更改做适当调整.八、性能这个服务很明显是IO密集的,就没什么计算,主要是调用各种外部服务,等IO返回.所以对于这些各个用来做请求的线程池就可以配置稍微大一点,实际主要的就是HTTP的连接池.但连接超时,读取超时也不适合设置过大.

JAVA实现短信群发的步骤:

1、使用第三方短信平台服务商,接入短信服务;

2、调用短信提交页面发送请求;

3、服务器向第三方短信平台提交发送请求;

4、短信平台通过运营商将短信下发至用户的手机上。

以下是秒赛短信平台JAVA短信验证码接口代码示例

package test

import java.io.IOException

import java.io.UnsupportedEncodingException

import java.net.URISyntaxException

import java.net.URLEncoder

import org.apache.commons.httpclient.HttpClient

import org.apache.commons.httpclient.NameValuePair

import org.apache.commons.httpclient.methods.PostMethod

import org.apache.commons.lang3.StringUtils

public class Apis {

// 短信发送接口的http地址,请咨询客服

private static String url = “xxxxxxxxxxxxxxxxxxxxxxxxxxxx”

// 编码格式。发送编码格式统一用UTF-8

private static String ENCODING = “UTF-8”

public static void main(String[] args) throws IOException, URISyntaxException {

// 账号

String account = “************************”

// 密码

String pswd = “************************”

// 修改为您要发送的手机号,多个用,分割

String mobile = “13*********”

// 设置您要发送的内容

String msg = “【秒赛科技】您的验证码是:1234”

// 发短信调用示例

System.out.println(Apis.send(account,pswd, mobile, msg));

}

/**

* 发送短信

*

* @param account

*            account

* @param pswd

*            pswd

* @param mobile

*            手机号码

* @param content

*            短信发送内容

*/

public static String send(String account,String pswd, String mobile, String msg) {

NameValuePair[] data = { new NameValuePair(“account”, account),

new NameValuePair(“pswd”, pswd),

new NameValuePair(“mobile”, mobile),

new NameValuePair(“msg”, msg),

new NameValuePair(“needstatus”, “true”),

new NameValuePair(“product”, “”) }

return doPost(url, data);

}

/**

* 基于HttpClient的post函数

* PH

* @param url

*            提交的URL

*

* @param data

*            提交NameValuePair参数

* @return 提交响应

*/

private static String doPost(String url, NameValuePair[] data) {

HttpClient client = new HttpClient();

PostMethod method = new PostMethod(url);

// method.setRequestHeader(“ContentType”,

// “application/x-www-form-urlencodedcharset=UTF-8”);

method.setRequestBody(data);

// client.getParams()。setContentCharset(“UTF-8”);

client.getParams()。setConnectionManagerTimeout(10000);

try {

client.executeMethod(method);

return method.getResponseBodyAsString();

} catch (Exception e) {

e.printStackTrace();

}

return null

}

}

Java实现短信自动发送功能主要是用httpclient实现的,要有发短信的端口。

1、硬件设备是一个3G网卡;

2、软件方面需要sun提过的java底层通信common包;

3、此外还需要第三方库SMSLib,这个是开源项目,主要用于实现java发短信的功能;

主要代码如下:

HttpClient client = new HttpClient()

PostMethod post = new PostMethod(

"http://cf.lmobile.cn/submitdata/service.asmx/g_Submit")

post.addRequestHeader("Content-Type",

"application/x-www-form-urlencodedcharset=utf-8")// 在头文件中设置转码

NameValuePair[] data = { new NameValuePair("sname", "*****"),

new NameValuePair("spwd", "*****"),

new NameValuePair("scorpid", "*****"),

new NameValuePair("sprdid", "*****"),

new NameValuePair("sdst", "*****"),

new NameValuePair("smsg", "*****") }

post.setRequestBody(data)

 

client.executeMethod(post)

Header[] headers = post.getResponseHeaders()

int statusCode = post.getStatusCode()

System.out.println("statusCode:" + statusCode)

for (Header h : headers) {

System.out.println(h.toString())

}

String result = new String(post.getResponseBodyAsString().getBytes("utf-8"))

System.out.println(result)

post.releaseConnection()

Java源程序(.java文件)——>java字节码文件(.class文件)——>由解释执行器(java.exe)将字节码文件加载到java虚拟机(jvm)——>字节码文件(.class)就会在java虚拟机中执行。

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程   。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点  。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等