Spring JMS with Azure Service Bus

作者:Rui 发布时间:May 20, 2016 分类:JAVA,Azure,CLOUD 浏览:1,062

Spring JMS 整合Azure Service Bus,JMS API实现 依然借助于Qpid JMS Client的实现。

源码下载地址:spring-jms-servicebus-demo

Qpid JMS Client 连接 Azure Service Bus 的文档,请参考:
http://arui.me/index.php/archives/120/

首先,创建Maven 项目,将Spring JMS和Qpid的依赖加入到POM中。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.2.6.RELEASE</version>
    </dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jms</artifactId>
    <version>4.2.6.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.apache.qpid</groupId>
    <artifactId>qpid-jms-client</artifactId>
    <version>0.9.0</version>
</dependency>

之后,设置配置文件,并通过Spring读取配置文件

servicebus.hostname=amqps://kevinsb.servicebus.chinacloudapi.cn?amqp.idleTimeout=200000
servicebus.username=RootManageSharedAccessKey
servicebus.password=n6Kh4vcfEpSjD0oAZrmPtNF1oFEoVLsOra4FB4c36UM=
servicebus.queue=queue1

阅读剩余部分...

Using JMS with Azure Service Bus and AMQP 1.0 (New)

作者:Rui 发布时间:May 18, 2016 分类:JAVA,Azure,CLOUD 浏览:1,025

Microsoft Azure Service Bus 是微软提供的消息服务总线云服务,支持消息队列, 主题订阅,点对点消息, Event Hubs功能。类似于ActiveMQ的功能, Service Bus是支持AMQP 1.0协议的,所以基于AMQP 1.0协议实现的JMS客户端均都可以连接 Service Bus发送接受消息。

本文将采用Apache Qpid 来连接Service Bus 的消息队列,简单实现一个发送接收消息队列的功能。
Azure 官网提供的示例和文档,均是使用较旧的Qpid客户端,本文将使用最新的 Qpid JMS 0.9 去连接Service Bus.
可以从Qpid 官网中,看出最新的Qpid JMS client 是支持AMQP1.0协议的。
Untitled picture.png

using AMQP with Service Bus Queue

首先,引入Qpid JMS client lib,使用Maven配置依赖

<dependency>
    <groupId>org.apache.qpid</groupId>
    <artifactId>qpid-jms-client</artifactId>
    <version>0.9.0</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.5</version>
</dependency>

阅读剩余部分...

Java 调用 Azure HTTPS API 证书问题

作者:Rui 发布时间:May 16, 2016 分类:JAVA,Azure,CLOUD 浏览:960

Java 访问 Azure HTTPS的API时,会经常报:PKIX:unable to find valid certification path to requested target 这样的错误,这是因为Java有自己的KeyStore,并不会使用系统的证书, Java在自己的KeyStore中找不到对应的信任证书,就会报出此错误。所以如果需要使用Java访问Azure的HTTPS的API,就需要将Azure 网站的证书添加到JDK的KeyStore中。

以下是手动导入的方式:

  1. Azure 使用Wosign的证书, 从http://www.wosign.com/Root/index.htm# 站点下载WoSign 根证书(Certification Authority of WoSign),将.crt 文件后缀改为 .cer

  2. 执行以下命令导入

    keytool -keystore "C:\Program Files\Java\jdk1.8.0_71\jre\lib\security\cacerts" -importcert -alias WoSign -file WS_CA1_NEW.cer
    

    接下来 会提示输入密码,默认密码为 changeit,输入之后,选择‘是’将其安装到JDK 可信证书库中。

  3. 如果看到以下结果,则导入成功。
    Image.png

也可以借助以下代码,将证书自动带入JDK的KeyStore,请参开此文档:http://arui.me/index.php/archives/69/

Azure 高级版 Redis 如何持久化

作者:Rui 发布时间:May 11, 2016 分类:Azure,Redis,BIGDATA,CLOUD 浏览:904

Redis 持久化

为了保证redis cache数据安全,同时在服务器故障时,能够在重启后进行数据恢复。redis 提供了两种持久化方案 RDB和AOF。

RDB

RDB持久化,快照是默认的持久化方式。这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照

RDB持久化过程:

  1. Redis启用子线程fork主线程进行持久化,不影响父线程的I/O
  2. 父进程继续处理client请求,子进程负责将内存内容写入到临时文件。由于os的写时复制机制(copy on write)父子进程会共享相同的物理页面,当父进程处理写请求时os会为父进程要修改的页面创建副本,而不是写共享的页面。所以子进程的地址空间内的数据是fork时刻整个数据库的一个快照。
  3. 当子进程将快照写入临时文件完毕后,用临时文件替换原来的快照文件,然后子进程退出(fork一个进程入内在也被复制了,即内存会是原来的两倍)。

AOF

Append-only file,aof 比快照方式有更好的持久化,是由于在使用aof持久化方式时,redis会将每一个收到的写命令都通过write函数追加到文件中(默认是appendonly.aof)。当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。当然由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机

AOF持久化过程:

  1. Redis启用子线程fork主线程进行持久化,不影响父线程的I/O
  2. 子进程根据内存中的数据库快照,往临时文件中写入重建数据库状态的命令
  3. 父进程继续处理client请求,除了把写命令写入到原来的aof文件中。同时把收到的写命令缓存起来。这样就能保证如果子进程重写失败的话并不会出问题。
  4. 当子进程把快照内容写入已命令方式写到临时文件中后,子进程发信号通知父进程。然后父进程把缓存的写命令也写入到临时文件。
  5. 现在父进程可以使用临时文件替换老的aof文件,并重命名,后面收到的写命令也开始往新的aof文件中追加。

阅读剩余部分...

使用 Azure Resource Manage JAVA API 管理 Azure 资源

作者:Rui 发布时间:March 23, 2016 分类:JAVA,Azure,CLOUD 浏览:1,132

Azure提供两种资源管理模式,Service Manage 和Resource Manage, Service Manage 是相对较旧的管理模式,目前Azure Global 最新的管理界面已经完全使用Resource Manage的方式来管理Azure 资源,而中国Azure更新相对Global较为迟缓,依然使用经典的管理界面来管理资源,而旧的管理界面大多是以Service Manage的API来管理资源,所以目前在国内,依然使用Service Manage的API来管理资源。

虽然国内没有更新管理界面,但是部分Resource Manage的API,已经在服务端部署,所以我们也是可以使用Resource Manage的API来操作Azure资源,只是创建的资源目前在Portal界面是无法看到的。

以下是具体使用Resource Manage来操作Azure 资源。

在PowerShell中,登录Azure 账户

Login-AzureRmAccount -EnvironmentName AzureChinaCloud

选择当前订阅ID

Set-AzureRmContext -SubscriptionId <subscription ID>

阅读剩余部分...