1. 程式人生 > >Windows下activemq搭建及應用場景

Windows下activemq搭建及應用場景

一:搭建及執行

1:解壓下載好的activemq壓縮包

2:進入${dir}/apache-activemq-5.5.0/bin目錄,雙擊執行activemq.bat,

等待出現:

3:進入http://127.0.0.1:8161/admin/(這是activemq自帶的一個web專案,進入的賬號密碼在配置檔案中指定,稍後會講),


圖中紅色標識的是:當前伺服器有那些主題,及該主題的生產消費情況。主題可在自己的web專案中指定,稍後會講。

二:開始建立自己的web工程

     2.1:建立maven專案,引入jar,具體如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>web_pro</groupId>
  <artifactId>pro</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>pro Maven Webapp</name>
  <url>http://maven.apache.org</url>
    <properties>
        <spring.version>4.2.5.RELEASE</spring.version>
        <mybatis.version>3.2.7</mybatis.version>
        <shiro.version>1.2.5</shiro.version>
        <slf4j.version>1.7.7</slf4j.version>
        <jedis.version>2.7.2</jedis.version>
        <log4j.version>1.2.17</log4j.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>${jedis.version}</version>
        </dependency>

        <!--   <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>-->


        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-websocket</artifactId>
            <version>4.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>3.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>3.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
            <version>3.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.2.1.RELEASE</version>
        </dependency>



        <!--   <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>5.0.1.Final</version>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.44</version>
            </dependency> -->

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>

        <dependency>
            <groupId>net.sourceforge.jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.6.12</version>
        </dependency>

        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
            <scope>provided</scope>
        </dependency>

        <!-- <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.5.13</version>
        </dependency> -->

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.1</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.1</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.1</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>

        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.8.10</version>
        </dependency>

        <!--<dependency>
            <groupId>com.octo.captcha</groupId>
            <artifactId>jcaptcha</artifactId>
            <version>1.0</version>
        </dependency>-->

        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>

        <!-- mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>

        <!-- 分頁 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>
        <!-- mysql 資料連線 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.21</version>
        </dependency>

        <!-- 阿里 連線池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.3</version>
        </dependency>
        <!-- c3p0 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
        <!-- mybatis逆向工程jar包 -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.4</version>
        </dependency>


        <!--      <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.9</version>
                    <scope>test</scope>
                </dependency>   -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version> 3.2.4.RELEASE  </version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.39</version>
        </dependency>

        <!-- 極光推送 -->
        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version>3.2.17</version>
        </dependency>

        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jiguang-common</artifactId>
            <version>1.0.3</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.6.Final</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.3</version>
        </dependency>
        <!--壓縮圖片-->
        <dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.8</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>

        <dependency>
            <groupId>net.sourceforge.jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.6.12</version>
        </dependency>


        <!--   方法1
            <dependency>
             <groupId>pull-parser</groupId>
             <artifactId>pull-parser</artifactId>
             <version>2.1.10</version>
            </dependency>
            <dependency>
                <groupId>dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>1.5</version>
                <exclusions>
                    <exclusion>
                        <groupId>pull-parser</groupId>
                        <artifactId>pull-parser</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>-->
        <!--方法二-->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>RELEASE</version>
        </dependency>


        <!--訊息佇列-->
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <version>5.9.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>4.2.1.RELEASE</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <!-- mybatis 逆向工程maven工具 -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.21</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
        <finalName>pro</finalName>
    </build>
</project>

     注意:上面的pom.xml主要是引入了這幾個包

  

  2.2:然後修改application-context,xml,主要是在專案中配置activemq
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:task="http://www.springframework.org/schema/task"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-4.0.xsd
      http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
      http://www.springframework.org/schema/task
          http://www.springframework.org/schema/task/spring-task-4.0.xsd">

   <!-- 開啟掃描 -->
   <context:component-scan base-package="activemq" />
    <!-- Activemq 連線工廠 -->
    <bean id="activeMQConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <constructor-arg value="lcm" /><!--使用者名稱許可權驗證,在mq配置檔案對應-->
        <constructor-arg value="lcm" />
        <constructor-arg value="failover:(tcp://localhost:61616,tcp://localhost:61617)?timeout=2000" /><!--配置叢集,以,分割-->
    </bean>

    <!-- ConnectionFactory Definition -->
<bean id="connectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="activeMQConnectionFactory" />
</bean>
<!-- Default Destination Queue Definition -->
<!-- 測試配置多個Destination -->
<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="myQueueName" /><!--自己的主題-->
</bean>
<!-- JmsTemplate Definition -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="defaultDestination" ref="destination" />
</bean>
<!-- Message Sender Definition -->
<bean id="messageSender" class="activemq.publisher.MessageSender">
<constructor-arg index="0" ref="jmsTemplate" />
<constructor-arg index="1" ref="destination" />
</bean>
<!-- 訊息監聽器,主要監聽的目的地址 Message Receiver Definition -->
<bean id="messageReceiver" class="activemq.consumer.MessageReceiver">
</bean>
<bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destinationName" value="myQueueName" /><!--消費傳送者指定的主題-->
<property name="messageListener" ref="messageReceiver" />
</bean>
</beans>

三:解釋配置檔案

        到這一步基本完成了整合,具體要注意的步驟有一下幾點:

        3.1: org.apache.activemq.ActiveMQConnectionFactory:是連線工廠,該類的構造方法傳遞了連線服務的使用者名稱和密碼,伺服器的ip,注意該ip可以是個叢集.使用者名稱密碼的指定配置在${dir}\apache-activemq-5.9.0\conf\activemq.xml中的<broker></broker>標籤內新增如下標籤:

<plugins>
    <simpleAuthenticationPlugin>
        <users>
            <authenticationUser username="lcm" password="lcm" groups="admins"></authenticationUser>
        </users>
    </simpleAuthenticationPlugin>
</plugins>

       3.2:activemq.xml檔案中的使用者名稱密碼與自己專案配置檔案裡關於activemq配置的使用者名稱密碼一致,然後連線工廠的第三個引數為activemq的伺服器ip,它採用tcp連線,並且failover進行叢集,並附帶超時引數2000ms,其中的連線埠可以更改,具體在:${dir}\apache-activemq-5.9.0\conf\activemq.xml的


        3.3:構造佇列:org.apache.activemq.command.ActiveMQQueue:構造方法中指定了自己佇列的名稱

         3.4:整合jms:

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="defaultDestination" ref="destination" />
</bean>

        3.5:再接著整合自己編寫的訊息接受類和傳送類,這個兩個類主要是是實現了一些監聽方法,然後做自己的業務處理

<bean id="messageSender" class="activemq.publisher.MessageSender">
    <constructor-arg index="0" ref="jmsTemplate" />
    <constructor-arg index="1" ref="destination" />
</bean>
<bean id="messageReceiver" class="activemq.consumer.MessageReceiver">

        3.6:最後將自己的監聽類和配置activemq的訊息佇列及actiemq的連線工廠整合到jms監聽中

<bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="destinationName" value="myQueueName" /><!--消費傳送者指定的佇列名稱-->
    <property name="messageListener" ref="messageReceiver" />
</bean>

四:專案中的使用場景及額外注意步驟:

       activemq是在高併發下將請求處理的佇列化,它自身處理多執行緒等一系列問題,所以我們直接用即可,監聽好它的訊息,然後一步步將佇列中的請求消費完。

      提到高併發就不由想到nginx,有了nginx負載不就完了嗎?為什麼還用訊息佇列呢?

      答案如下:1:系統的瓶頸往往出在資料庫,nginx的架構適合於多系統多資料庫,對於資料庫叢集可適用,但這會導致資料同步等一系列問題增多.activemq針對的是單資料庫,比如有些場景只使用了一個數據庫(類似一些中心資料庫),mq使用場景圖如下:


                    2:比如持久層資料庫和redis同步時,如果出現大量請求,資料同步方案也可以放在activemq佇列中處理,防止併發出現的問題

五:注意事項

    使用activemq時,需防止單機宕機導致資料丟失,所以需要處理額外步驟:

        1:需要做叢集

        2:做資料持久化,持久方案有多種,目前推薦activemq自帶的KahaDB方式處理

相關推薦

Windowsactivemq搭建應用場景

一:搭建及執行1:解壓下載好的activemq壓縮包2:進入${dir}/apache-activemq-5.5.0/bin目錄,雙擊執行activemq.bat,等待出現:3:進入http://127.0.0.1:8161/admin/(這是activemq自帶的一個web

rails學習之windows環境搭建專案建立(圖文並茂,簡單易懂)

第一步: 直接下載railsinstaller進行安裝,這樣省去很多後續問題和麻煩。 筆者用的是railsinstaller-2.1.0,這是一個exe程式,下載好之後直接點選安裝即可。 注:需 要railsinstaller-2.1.0的安裝程式的留下郵箱,我單個發。 第

Tesseract 在 windows 的安裝簡單應用

打開 版本信息 文本 否則 選擇 分享 16px alt 運行 Tesseract 是一個開源的 OCR 引擎,可以識別多種格式的圖像文件並將其轉換成文本,最初由 HP 公司開發,後來由 Google 維護。下載地址:https://digi.bib.uni-mannhei

Yolo的搭建和在Windows封裝以及工程應用

  概述   最近一直在研究基於深度學習的目標檢測這一塊,之前用過faster_rcnn和R-FCN,相對來說檢測的準確率應該是可以的,但是實際的檢測速度還是很不理想的,考慮實際工程的需求,所以後來想著用yolo來做目標檢測,經過測試發現yolo確實是在檢測速

windows ActiveMQ叢集搭建ActiveMq+zookeeper+levelDB)

已成功配置偽叢集,高可用 啟動zookeeper,啟動報錯正常,等3個服務都啟動了,即完全啟動了 啟動3個activemq服務 如上截圖,埠8161服務自動分配為master;另外2個服務為slave;3個服務的話允許一個服務結束通話,具體參考說明請

Windows安裝Resin配置詳解與釋出應用

    關於Resin的好處,網上介紹了一大堆,小編經不住誘惑,決定試用一下。目前Resin的最新版本為:4.0.40,可以從官網直接下載。     1. 將下載下來的Resin包解壓開,會看到一大堆的檔案,有一些關鍵的檔案,我們需要了解一下。 resin-4.0.4

Windows環境搭建EasyDarwin流媒體伺服器測試指南

相關網站: https://github.com/EasyDarwin/EasyDarwin/tree/master/EasyDarwin 一、準備工作,需要先下載我們需要的程式 1、EasyDarwin  下載地址:https://github.com/EasyDarwi

Caffe-ssd版本在windows 10環境搭建模型訓練

1.配置環境 系統:windows 10 64位 GPU:GTX1080 CUDA:9.0 cudnn:7.0 Python:Anaconda 2.7 version 編譯:Visual Studio 2013 2.安裝CUDA和cudnn CU

redis 在Windows的安裝基本操作(更新中~~~)

有用 redis 安裝 abc nbsp com inux eas pan 安裝目錄 Redis 安裝 Window 下安裝 下載地址:https://github.com/MSOpenTech/redis/releases。 Redis 支持 32 位和 64 位。這個需

Windows Nexus搭建Maven私服

4.3 快照 激活 nap cti sha 基本 新增 項目 轉自:http://blog.csdn.net/fanyuna/article/details/40145827 1、 為什麽使用Nexus 如果沒有私服,我們所需的所有構件都需要通過mave

淺談session,cookie,sessionStorage,localStorage的區別應用場景

text 響應 font 會話 安全 path 時間 mage 路徑 瀏覽器的緩存機制提供了可以將用戶數據存儲在客戶端上的方式,可以利用cookie,session等跟服務端進行數據交互。 一、cookie和session cookie和session都是用來跟蹤瀏覽器用戶

windows 安裝 rabbitMQ 操作常用命令(轉)

點擊 結束 進程 重啟 開始 use 完成 題解 五類 windows下 安裝 rabbitMQ 及操作常用命令 rabbitMQ是一個在AMQP協議標準基礎上完整的,可服用的企業消息系統。它遵循Mozilla Public License開源協議,采用 Erlang

windows 安裝 rabbitMQ 操作常用命令

log 控制臺命令 讀寫權限 ofo 下載 分享 monitor perm 服務 rabbitMQ是一個在AMQP協議標準基礎上完整的,可服用的企業消息系統。它遵循Mozilla Public License開源協議,采用 Erlang 實現的工業級的消息隊列(MQ)服務器

WindowsRabbitMQ安裝入門

guest plugins sys def 一個 top new all num 1.Windows下安裝RabbitMQ需要以下幾個步驟 (1):下載erlang,原因在於RabbitMQ服務端代碼是使用並發式語言erlang編寫的,下載地址:http://www

Java設計模式之《單例模式》應用場景

urn vol 運行 www 同步問題 href 外部 占用 模式 轉載參考:http://www.cnblogs.com/V1haoge/p/6510196.html 所謂單例,指的就是單實例,有且僅有一個類實例,這個單例不應該由人來控制,而應該由代碼來限制,強制單例。

Java設計模式之《外觀模式》應用場景

nbsp str 之間 系統設計 static 系統 被調用 sub div 轉載參考:http://www.cnblogs.com/V1haoge/p/6484128.html 1、外觀模式簡介   外觀模式,一般用在子系統與訪問之間,用於對訪問屏蔽復雜的子系統調用,采用

python MySQLdb Windows安裝教程問題解決方法

ram info hfile 工具 兩個 auth let devtools load 使用python訪問mysql,需要一系列安裝 linux下MySQLdb安裝見 Python MySQLdb在Linux下的快速安裝http://www.jb51.net/artic

Docker五種存儲驅動原理應用場景和性能測試對比

Docker 存儲驅動 Docker最開始采用AUFS作為文件系統,也得益於AUFS分層的概念,實現了多個Container可以共享同一個image。但由於AUFS未並入Linux內核,且只支持Ubuntu,考慮到兼容性問題,在Docker 0.7版本中引入了存儲驅動, 目前,Docker支持AUFS

區塊鏈技術發展應用場景

結構 管制 caption idt nsh 資產 貢獻 level 分鐘 本文內容來自最近的一次分享,整理成一篇文章,主要關註區塊鏈技術特點,幾個發展階段以及應用場景,文末有PPT下載地址。 一、進擊的區塊鏈 作為分布式記賬(Distributed Le

PHP(Mysql/Redis)消息隊列的介紹應用場景案例--轉載

接收 根據 好友 學習 range nod 存取 情況下 ble 鄭重提示:本博客轉載自好友博客,個人覺得寫的很牛逼所以未經同意強行轉載,原博客連接 http://www.cnblogs.com/wt645631686/p/8243438.html 歡迎訪問 在進行網站設計