转载

在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

在这个由两部分组成的教程系列中,将学习如何设计和构建消息服务应用程序。本文将使用一个 Liberty for Java 应用程序作为示例,您将了解如何集成两个外部消息服务,使用它们的 API,使用 IBM Bluemix™ SQL Database Service 实现持久性,使用 Dojo JavaScript 框架提供一个富 Web 2.0 前端。

在这个由两部分组成的教程系列的第 1 部分中,介绍了应用程序架构,列出了构建一个类似应用程序所需的工具,还分析了获取示例应用程序代码和设置开发环境的步骤。我还将介绍我们的 3 层多消息富 Web 应用程序的设计和实现,分析每一层并提供了重要的代码段。

在第 2 部分中,我们将介绍多消息应用程序部署细节,以及 IBM WebSphere Application Server V8.5 Liberty 配置文件上的本地测试。您还会进一步了解外部消息服务。

如果您尚未向 Bluemix 注册,请获取示例代码和设置您的应用程序,按照第 1 部分 中的介绍完成这些步骤。

要将我们的示例应用程序部署到 Bluemix 上,请执行以下步骤:

第 1 步. 在 Bluemix 上创建一个 SQL DB Service

  1. 登录到 Bluemix 。在标题栏的右上角,单击 Catalog 。您会跳转到一个新页面。在左侧导航栏中的 Services 下,单击 Data & Analytics
  2. 在 Data & Analytics 下,单击 SQL Database在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试
  3. 在 Add Service 对话框中,在 App 字段中选择 Leave unbound 。输入您选择的一个服务名称(不含空格)。现在,选择 Free Beta 作为 Selected Plan。单击 CREATE在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

第 2 步. 创建 Nexmo 和 Twilio 帐户

要发送 SMS 消息,首先需要在 Nexmo 和 Twilio 上创建您的消息服务帐户。该过程对二者是相同的,但 Twilio 需要一个额外的步骤来获取一个支持 SMS 的电话号码。

Nexmo

  1. 在 Nexmo 上创建您的帐户。记下您在创建帐户时提供的电话号码。此号码会自动添加为测试号码。在后续步骤中,您将使用此号码作为 NEXMO_SMS_FROM。
  2. 登录到 Nexmo 并单击 API Settings在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试
  3. 获取 API 密钥和秘密。
  4. 您可以单击 API Settings > Edit > Test Phone Numbers 添加更多测试号码,这是一个可选操作。在本文中,一个号码就足够了。

Twilio

  1. 在 Twilio 上创建您的帐户并登录。
  2. 单击 Numbers > Buy a Number
  3. 选择您的国家,选择 SMS 作为 Capabilities,然后单击 Search在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

    点击查看大图

    关闭 [x]

    在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

  4. 从给定的可用号码列表中选择一个号码。确保选择了一个支持 SMS 的号码。在后续章节中将会使用此号码作为 TWILIO_SMS_FROM。
  5. 从 login Profile 下拉列表,单击 Account在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试
  6. 记下有效 API 的 AccountSIDAuthToken 。单击 Lock 查看 AuthToken

备注:为了避免未来产生费用,请在本教程最后释放您的号码,除非您打算继续使用它。

第 3 步. 将应用程序从 Eclipse IDE 发布到 Bluemix

在本教程系列的第 1 部分 中,您在 Eclipse 中安装了 Bluemix 工具,并将 Bluemix 服务器添加到了 Eclipse Servers 列表中。现在,您将在 Eclipse 中设置 Bluemix 服务器并发布您的应用程序。

  1. 在您的 Eclipse IDE 中,打开 Servers 选项卡并单击 Windows > Show View > Others > Server > Servers
  2. 双击 Bluemix 服务器并验证您的帐户。保留剩余配置的默认设置。
  3. 如果服务器尚未启动,请启动它。等待服务器状态表明它已启动。如果您的服务器已启动,不要重新启动它,因为这会花很长的时间。
  4. 右键单击 IBM Bluemix Server 将您的应用程序添加到服务器。选择 Add and Remove > Add multimessage > Finish
  5. 您将被提示为应用程序提供一个惟一名称。该名称不得为 “multimessage”。勾选 Save to manifest file 并单击 Next
  6. 在 Launch Deployment 面板上,单击 Next在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

    点击查看大图

    关闭 [x]

    在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

  7. 在看到选择要绑定到应用程序的服务的选项时,选择您创建的 SQL DB 服务,然后单击 Next
  8. Environment Variables 面板包含环境变量和它们的值。您可以针对您的应用程序来调整环境变量。 在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

    点击查看大图

    关闭 [x]

    在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

  9. 使用上面显示的 Edit Variable Entry 对话框,输入以下环境变量和它们的值:

    清单 1. 环境变量

    NEXMO_SMS_FROM   - obtained in step 2 > Nexmo > 1. example value: 353862335871 (must not prepend + or 00 sign) NEXMO_API_KEY       - obtained in step2 > Nexmo > 3. example value: 12345678 NEXMO_API_SECRET   - obtained in step2 > Nexmo > 3. example value: 12345678  TWILIO_SMS_FROM    - obtained in step2 > Twilio > 4. example value: +353768886708 (must prepend a + sign and no spaces in between) TWILIO_ACCOUNT_SID - obtained in step2 > Twilio > 6. example value: ACe69a03aacff17c501eb1da1e5ee456ee TWILIO_AUTH_TOKEN  - obtained in step2 > Twilio > 6. example value: 12345678901234567890123456789012
  10. 单击 Finish 。您的应用程序现在将会开始发布。
  11. 您可以在 Eclipse IDE 的 Console 选项卡中查看应用程序日志。也可以在 Bluemix 上查看日志。在 Bluemix 上打开您的应用程序并选择 Files and logs > Logs > messages.log

    。如果应用程序的行为不符合预期,一定要查看日志。

    如果日志中没有错误,那么您的应用程序已成功部署到 Bluemix 上!

  12. 如果您在此阶段获得错误 Error:Client error - Error performing operation:500 Error ,则表明 Bluemix 服务临时中断。有关的详细信息,请参阅 500 Error with Push

    如果出现这种情况,请等待服务恢复正常,然后从 Eclipse IDE 删除您的应用程序。为此,请转到 Servers 选项卡,并右键单击 Bluemix server > Remove > Do not remove the DB services during this wizard > Finish

    再次按照上面的第 3.4 到 3.8 的步骤添加该应用程序。因为您选择保存到清单文件,所以无需再次提供环境变量值。

  13. 在 Bluemix 上打开您的仪表板,单击您空间的名称并选择 CF Apps 来查看您应用程序的状态,如下所示: 在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试
  14. 单击该应用程序,查看它的更多细节。IBM Bluemix 使您的应用程序只需几分钟即可完成部署,为您提供了调整资源来满足应用程序需求的能力。例如,您可以在任何时候增加实例数量和内存。 在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

    点击查看大图

    关闭 [x]

    在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

  15. 在 SQL Database 部分,单击 Show Credentials 链接并记下以下细节。在以后连接到数据库时需要这些细节。 在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试
  16. 一定要记下以下字段:
    • name: 在配置环境用于本地测试时,该名称会包含在 JNDI 服务名称中。
    • port: DB 端口
    • db: db2 客户端中的数据库名称
    • username: 用于身份验证,也用于模式名称
    • hostname: 这会在配置环境用于本地测试时成为 servername
    • password: 用于身份验证的密码

第 4 步. 创建一个数据库表并插入示例联系人数据

要创建一个数据库表并插入示例联系人数据,可以使用 IBM Data Studio Client 或 IBM SQL DB Service Web 控制台。

选项 1. 创建一个数据库表并使用 IBM Data Studio Client 插入联系人数据

  1. 要使用 IBM Data Studio,请按照 下载和安装 IBM Data Studio 指南进行操作。
  2. 使用应用程序代码中提供的 create_tables.sqlinsert_sample_data.sql 文件分别创建该表和在您的 IBM SQL DB 服务上插入联系人。
  3. 将两个文件中的模式名称 USER03749 更新为您在上面的第 3.15 步中获得的名称。

    备注:模式名称与 username 相同。

  4. 从 Data Studio Client 连接到您的 SQL DB Service。打开 Data Source Explorer 并单击 View > Database connections > New 。提供您的 SQL DB 服务的连接细节。单击 Finish在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

    点击查看大图

    关闭 [x]

    在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

  5. 打开 Data Studio Client IDE 并单击 File > Open > <path to the create_tables.sql> > OK 来打开 create_tables.sql
  6. 单击右上角的 Run Sql 按钮。这将创建 ContactList 表。
  7. 创建该表后,对 insert_sample_data.sql 重复上面的第 5 和 6 步来填充联系人。

    备注:示例 insert_sample.sql 文件已包含一些联系人。使用您自己的数据更新 contactNamecontactNumber 字段。

  8. 运行 SQL 来插入该数据。

    备注:不要更改 userid 字段。就现在而言,将它保留为 user1 。请查阅本教程末尾的后续步骤来了解您可以执行的未来增强的详细信息。

选项 2:创建一个数据库表并使用 IBM SQL DB Service Web 控制台插入联系人数据

如果使用了 IBM SQL DB Service Web 控制台,请执行以下步骤:

  1. 转到 Bluemix 上您的空间。在 SERVICES 下,单击 SQL DB Service 。在左上角,选择 Launch 。在新页面上,单击 Manage tab > Work with Tables > 加号 (+) 创建一个表。 在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试
  2. 在 SQL 编辑器中,插入以下 SQL 语句并单击 Run DDL

    备注:有时上面的页面中没有显示模式。可忽略此问题。运行下面这条命令后,模式会自动出现。

    清单 2. CREATE TABLE ContactList

    CREATE TABLE ContactList (   Id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY    ( START WITH 1 INCREMENT BY 1 MINVALUE -2147483648    MAXVALUE 2147483647 NO CYCLE CACHE 20 NO ORDER ),    UserId VARCHAR(128) NOT NULL,    ContactName VARCHAR(128) NOT NULL,    ContactNumber VARCHAR(128)  )  DATA CAPTURE NONE   COMPRESS NO;  ALTER TABLE ContactList   ADD CONSTRAINT ContactList_PK PRIMARY KEY  (Id);
  3. 再次单击 加号 (+) 。在 SQL 编辑器中,插入以下 SQL 语句并单击 Run DDL 。您可以使用来自首选列表的联系人来修改联系人。还可以添加更多像这样的插入语句。

    清单 3. SQL 插入语句

    insert into CONTACTLIST (USERID, CONTACTNAME, CONTACTNUMBER)     values ('user1', 'Ahmad', '+353862335871');  insert into CONTACTLIST (USERID, CONTACTNAME, CONTACTNUMBER)     values ('user1', 'Roger', '+353861241422');

    备注:不要更改 userid 字段。现在,为了简便起见,将它保留为 user1 。请查阅本教程末尾的后续步骤,了解未来增强的详细信息。

  4. 确认该数据已插入。在同一个页面上,单击您的模式并选择 CONTACTLIST table > Browse Data

第 5 步. 检查环境变量

Bluemix 提供了两种类型的环境变量:VCAP_SERVICES 和 USER-DEFINED。

VCAP_SERVICES 包含 Bluemix 可绑定服务的连接细节,在我们的例子中是 SQL DB Service。要获得 VCAP_SERVICES,可以登录到 Bluemix,转到您的仪表板和您的空间。单击 CF Apps > Your app > Environment Variables > VCAP_SERVICES

USER-DEFINED包含用户定义的变量。在这里,您可以看到您从 Eclipse IDE 发布应用程序时提供的变量。

在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

该应用程序现在已经可用。打开一个新浏览器窗口并输入您的应用程序的 URL:http://<your route>/index.html。例如,示例应用程序的路径为 http://multimessage.mybluemix.net/index.html 。

从 Bluemix 仪表板中获取您应用程序的路径,如下所示。

在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

备注:如果部署中存在错误,或应用程序存在其他问题,可将它们部署在本地来诊断,如第 7 步所述。

第 6 步. 检查多消息应用程序运行示例

  1. 这是一条成功发送的文本消息的示例: 在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试
  2. 当环境变量不正确时,可能导致错误,比如下面这个错误。在本例中,TWILIO_SMS_FROM 值是错的。我使用了一个未启用 SMS 的电话号码。 在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

第 7 步. 在本地主机上测试应用程序

以下步骤展示如何在 WebSphere Application Server (WAS) V8.5 Liberty 配置文件本地设置和部署您的应用程序。

  1. 如果阅读过本系列的第 1 部分,那么您已将应用程序添加到了本地 WAS 服务器(参见第 1 部分 中的第 2 步)。
  2. 双击 WebSphere Application Server V8.5 Liberty Profile at localhost ,它提供了以下配置: 在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

    点击查看大图

    关闭 [x]

    在 Bluemix 上构建一个多服务消息应用程序,第 2 部分:部署和测试

  3. 单击 Open server configuration > Source tab
  4. 在编辑器中,将以下代码段添加到 webApplication 元素中来配置 dataSource

    清单 4. 数据源配置

    <jdbcDriver id="DB2">     <library name="Db2library">      <fileset dir="C:/software/db2drivers/10.5"/>     </library>    </jdbcDriver>     <dataSource id="SQLDB" jdbcDriverRef="DB2" jndiName="jdbc/idea1-sqldb">     <properties.db2.jcc databaseName="SQLDB" password="123456" serverName="75.126.155.153"    user="user03749"/>    </dataSource> 
  5. 使用您应用程序的凭据更新上述代码段中的以下字段。请参阅本文第 3.15 步中的 Show Credentials 屏幕上显示的 DB Service 详细信息,了解您的应用程序细节。这是它们与上述字段的对应关系:
    • jndiName: "name"jdbc/ 为前缀。
    • serverName: "hostname"
    • user: "username"
    • password: "password"
    • databaseName: "db"
    • DB2library: 参见下一步。
  6. Db2library 指包含 DB2 驱动程序 db2jcc.jar 的文件夹。提供它在您环境中的位置的路径。按以下方式获取这个 JAR:
    1. 在创建模式和插入联系人数据时,如果您安装了 IBM Data Studio Client,那么可以从路径 <IBM Data Studio Client 安装目录>/DS4.1.0/dsdev/jar 中获取 db2cc.jar 文件。
    2. 如果未使用 IBM Data Studio Client,那么可以执行以下步骤来获取 db2cc.jar
      • 转到 DB2 JDBC Driver Versions and Downloads 。单击 DB2 Version 10.5 表中的 v10.5 FP5 > 3.69.24
      • 下载适合您环境的包。对于我的 Windows 环境,我使用了 DSClients--jdbc_sqlj-10.5.0.5-FP005 > v10.5fp5_jdbc_sqlj.tar.gz
      • 保存此归档文件中的 v10.5fp5_jdbc_sqlj/jdbc_sqlj/db2_db2driver_for_jdbc_sqlj/db2jcc.jar
  7. 要在本地测试应用程序,需要使用 Eclipse IDE 更新源代码中的以下 URL。这些 URL 位于 <您的项目>/WebContent/js/multimessage/MessageForm.js 中:
    1. /api/contacts/userid/user1
      更改为: /multimessage/api/contacts/userid/user1
    2. /api/messageservice/sendsms
      更改为: /multimessage/api/messageservice/sendsms
  8. <您的项目>/src/ com.multimessage.messageservice.nexmo.NexmoMessageSend.java 文件中的 Nexmo API 密钥。

    清单 5. Nexmo 密钥

    public static String sendSms(String contactNumberTo, String smsText) {  Account account = EnvUtils.getcredentials("NEXMO_API_KEY", "NEXMO_API_SECRET","12345678",   "12345678");
  9. 更新 <您的项目>/src/ com.multimessage.messageservice.nexmo.NexmoMessageSend.java 文件中 Nexmo 的 smsFromNumber
     return (smsFromNumber == null) ? "353862335871" : smsFromNumber;
  10. 更新 <您的项目>/src/ com.multimessage.messageservice.twilio.TwilioMessageSend.java 文件中 Twilio 的 smsFromNumber
    params.add(new BasicNameValuePair("From",  (smsFromNumber == null) ? "+353861800384" : smsFromNumber));
  11. 更新 <您的项目>/src/ com.multimessage.messageservice.twilio.TwilioMessageSend.java 文件中 Twilio 的 TWILIO_ACCOUNT_SIDTWILIO_AUTH_TOKEN
    Account twilioAccountCredentials = getcredentials
    ("TWILIO_ACCOUNT_SID", "TWILIO_AUTH_TOKEN", "AC34567890123456789012345678901234", "1234567890123456789012345678901234");
  12. <您的项目>/src/com.multimessage.db.DbLayer.java 中的 jndiName 字段值 ( idea1-sqldb ) 和 username 字段值 ( user03749 ) 更新为您的 Bluemix Database Service 值。

    清单 6. 更新 JNDI 名称

     privatestatic String getDataSourceName() {   String dataSourceName = EnvUtils.getDataSourceName();   if (dataSourceName == null) {    return "jdbc/idea1-sqldb"; //update value after /   }   return dataSourceName ;  }   publicstatic String getSchemaName() {   String schema = EnvUtils.getSchemaName();   if (schema  == null) {  return "user03749";//update this value   }   return schema;  }
  13. 确保上述更改已保存,然后右键单击 WebSphere Application Server V8.5 Liberty Profile 来启动该应用程序。如果它已启动,则需要重新启动它。
  14. 应用程序启动后,将该 URL (http://localhost:<服务器端口>/multimessage/) 复制到浏览器中。您现在可以像在 Bluemix Server 上使用该应用程序一样,在本地使用它。也可以在 Eclipse IDE 的 Console 选项卡下的日志记录中获取本地 URL。

问题排除技巧

  • 在多次重新启动服务器或删除/添加应用程序后,您可能开始看到错误 ClassNotFoundException 。要寻求帮助,请参阅这个dW Answers 已知问题和解决方案。这对我很有用。
  • 如果更改了配置或应用程序代码,而且更改未应用,请执行以下步骤:
    1. 转到 Eclipse IDE 并单击 Project > Clean 。选择要清理的项目并单击 OK
    2. 删除浏览器缓存并刷新浏览器页面。
  • 在调试时参阅 Eclipse IDE Console 选项卡中的日志。
  • 使用 Chrome DevTools 或 Firefox Firebug 等高级工具从前端调试。Chrome DevTools 可开箱即用地使用。
  • 在您想要调试的页面上,按 F12,然后参考 Console 和 Network 选项卡。

结束语

在这个由两部分组成的教程系列中,我演示了如何设计和构建消息服务应用程序,我使用一个 Liberty for Java 应用程序作为示例,演示了如何集成两个外部消息服务,使用它们的 API、IBM Bluemix SQL Database Service 和 Dojo JavaScript 框架。我们还介绍了一个现有多消息应用程序的从高级设计到低级代码细节的所有方面,演示了该应用程序在 Bluemix 上的部署细节、外部消息服务 API 帐户细节,以及 IBM WebSphere Application Server V8.5 Liberty 配置文件上的本地测试。您现在拥有创建您自己的消息服务应用程序所需的所有信息。如果在阅读这些文章时跟随我执行这些步骤,那么您已经有了一个应用程序。

后续步骤

针对此应用程序的后续步骤包括:

  • 提供用户登录功能。
  • 使用登录的用户 ID 从数据库中获取联系人列表。
  • 提供一个 UI 选项来创建一个新联系人,并保存它供未来使用。
  • 使用外部服务的语音 API,使用语音功能扩展该应用程序。

如果您拥有其他改进想法,请将它们添加到文章评论部分。您甚至还可以加入我的多消息项目并更新代码!

BLUEMIX SERVICE USED IN THIS TUTORIAL: SQL Database 服务 向您的应用程序添加一个按需关系数据库。它由 DB2 提供支持,提供了一个托管数据库服务来处理严苛的 Web 和事务工作负载。

相关主题: WASdev 开发人员中心 Bluemix 消息

正文到此结束
Loading...