dubbo 圖片服務器(FastDFS) redis solr ActiveMQ等簡單配置使用

1、dubbo

項目基於soa的架構,表現層和服務層是不一樣的工程。因此要實現商品列表查詢須要兩個系統之間進行通訊。前端

1.1如何實現遠程通訊?

一、Webservice:效率不高基於soap協議。項目中不推薦使用。java

二、使用restful形式的服務:http+json。不少項目中應用。若是服務太多,服務之間調用關係混亂,須要治療服務。(跨語言)node

三、使用dubbo。使用rpc協議進行遠程調用,直接使用socket通訊。傳輸效率高,而且能夠統計出系統之間的調用關係、調用次數。(只能用於java工程之間)linux

1.2 什麼是dubbo

Dubbo就是資源調度和治理中心的管理工具。(阿里開源分佈式工具)c++

1.3  Dubbo的架構

節點角色說明:git

Provider: 暴露服務的服務提供方。github

Consumer: 調用遠程服務的服務消費方。web

Registry: 服務註冊與發現的註冊中心。redis

Monitor: 統計服務的調用次調和調用時間的監控中心。spring

Container: 服務運行容器。

2.1 註冊中心

zookeeper註冊中心。

ZookeeperApacahe Hadoop的子項目,是一個樹型的目錄服務,支持變動推送,適合做爲Dubbo服務的註冊中心,工業強度較高,可用於生產環境,並推薦使用

2.1.1Zookeeper的安裝:

(須要jvm環境(java -version)(安裝注意位數對應),注意要關閉linux的防火牆。)

第一步:安裝jdk

第二步:解壓縮zookeeper壓縮包

第三步:將conf文件夾下zoo_sample.cfg複製一份,更名爲zoo.cfg

第四步:修改配置dataDir屬性,指定一個真實目錄

第五步:

啓動zookeeperbin/zkServer.sh start

關閉zookeeperbin/zkServer.sh stop

查看zookeeper狀態:bin/zkServer.sh status

 

詳解

1.上傳zookeeper壓縮包

2.解壓(tar zxf zookeeper-3.4.6.tar.gz)(獲得zookeeper文件夾)

3.進入 zookeeper文件夾(cd zookeeper-3.4.6)

4.建立data目錄(mkdir data)

5.進入conf目錄(cd conf)

6.將zoo_sample.cfg更名爲 zoo.cfg(mv zoo_sample.cfg  zoo.cfg)

7.編輯 zoo.cfg(vim zoo.cfg),將dataDir目錄改成建立的data目錄(/root/zookeeper-3.4.6/data)

8.進入zookeeper下的bin 目錄(cd ..  ->   cd bin)

9.運行(./zkServer.sh start)

10.查看是否啓動成功(./zkServer.sh status)

        (standalone:單例)

3.1dubbo使用方法

Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置便可,Dubbo基於SpringSchema擴展進行加載。

 

單一工程中spring的配置

 

<bean id="xxxService" class="com.xxx.XxxServiceImpl" />

<bean id="xxxAction" class="com.xxx.XxxAction">

<property name="xxxService" ref="xxxService" />

</bean>

 

 

 

遠程服務:

 

在本地服務的基礎上,只需作簡單配置,便可完成遠程化:

 

將上面的local.xml配置拆分紅兩份,將服務定義部分放在服務提供方remote-provider.xml,將服務引用部分放在服務消費方remote-consumer.xml

 

並在提供方增長暴露服務配置<dubbo:service>,在消費方增長引用服務配置<dubbo:reference>

 

發佈服務:

<!-- 和本地服務同樣實現遠程服務 -->

<bean id="xxxService" class="com.xxx.XxxServiceImpl" />

<!-- 增長暴露遠程服務配置 -->

<dubbo:service interface="com.xxx.XxxService" ref="xxxService" />

 

 

 

調用服務:

 

<!-- 增長引用遠程服務配置 -->

<dubbo:reference id="xxxService" interface="com.xxx.XxxService" />

<!-- 和本地服務同樣使用遠程服務 -->

<bean id="xxxAction" class="com.xxx.XxxAction">

<property name="xxxService" ref="xxxService" />

</bean>

例:

1.都加入dubbo相關jar包(須要移除spring和netty的傳遞依賴(也能夠在pom文件的dependency Hierarchy找到jar包右鍵 exclude Maven artifcrt...))

<!-- dubbo相關的jar包 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <exclusions> <!-- 移除spring的傳遞依賴 -->
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>netty</artifactId>
                    <groupId>org.jboss.netty</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>

 

2.發佈服務(在服務工程中)(在spring配置文件中添加(applicationContext-service.xml))

2.1在beans中加入dubbo及約束

xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 


http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd

2.2加入dubbo

  <!-- 使用Dubbo發佈服務 -->
    <!-- 提供方應用信息,用於計算依賴關係(取個應用名) -->
    <dubbo:application name="taotao-manager" />
    <!-- 註冊中心的地址 -->
    <dubbo:registry protocol="zookeeper" address="192.168.25.150:2181" />
    <!-- 用dubbo協議在20880端口暴露服務(能夠隨意,不衝突就行) -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!-- 聲明須要暴露的服務接口 -->
    <dubbo:service interface="com.taotao.service.ItemService" ref="itemServiceImpl" timeout="300000"/>
    <dubbo:service interface="com.taotao.service.ItemCatService" ref="itemCatServiceImpl" timeout="300000"/>
    

3.調用服務(在pom添加jar包及interface的引用)(在表現層工程中)(在springmvc.xml):

3.1一樣加入前綴 約束等

3.2

<!-- 引用dubbo服務 -->
<dubbo:application name="taotao-manager-web"/>
<dubbo:registry protocol="zookeeper" address="192.168.25.88:2181"/>    
<dubbo:reference interface="com.taotao.service.ItemService" id="itemService" />
<dubbo:reference interface="com.taotao.service.ItemCatService" id="itemCatService" />

 3.3在controller中使用方式

@Autowired
private ItemService itemService;

4 Dubbo監控中心

須要安裝tomcat,而後部署監控中心便可(dubbo-admin-2.5.4.war)(最好監控中心和zookeeper在同一臺服務器上)。

4.1安裝tomcat

4.1.1上傳 並解壓(tar zxf apache-tomcat-7.0.47.tar.gz)

4.1.2 上傳 dubbo-admin-2.5.4.war

4.1.3將dubbo-admin-2.5.4.war 複製到tomcat webapps目錄下並更名(cp dubbo-admin-2.5.4.war apache-tomcat-7.0.47/webapps/dubbo-admin.war)

4.1.4 啓動tomcat(進入到tomcat目錄下)

cd apache-tomcat-7.0.47
bin/startup.sh     //啓動tomcat
tail -f logs/catalina.out    //查看日誌

4.3進入監控中心網址(192.168.25.150:8080/dubbo-admin)(用戶名和密碼都爲root)

注 : 若是監控中心和zookeeper不在同一臺服務器須要修改一下配置文件

cd webapps/
cd dubbo-admin
cd WEB-INF/
vim dubbo.properties

(只需將第一行zookeeper地址改成對應的便可)

2、圖片上傳服務器

使用FastDFS,分佈式文件系統。存儲空間能夠橫向擴展,能夠實現服務器的高可用。支持每一個節點有備份機。

1.什麼是FastDFS

 

FastDFS是用c語言編寫的一款開源的分佈式文件系統。FastDFS爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集羣提供文件上傳、下載等服務。

2.圖片服務器的使用

2.1 java客戶端 使用fastdfs_client_v1.20.jar

2.2Maven環境

導入fastdfs_client工程(導入成功記得maven install  ,使用須要在pom中導入)

3. 上傳圖片

3.1. 上傳步驟

一、加載配置文件,配置文件中的內容就是tracker服務的地址。

配置文件內容:tracker_server=192.168.25.133:22122

二、建立一個TrackerClient對象。直接new一個。

三、使用TrackerClient對象建立鏈接,得到一個TrackerServer對象。

四、建立一個StorageServer的引用,值爲null

五、建立一個StorageClient對象,須要兩個參數TrackerServer對象、StorageServer的引用

六、使用StorageClient對象上傳圖片。

七、返回數組。包含組名和圖片的路徑。

 

測試代碼

public class FastDFSTest {

    @Test
    public void testFileUpload() throws Exception {
        // 一、加載配置文件,配置文件中的內容就是tracker服務的地址。
        ClientGlobal.init("D:/workspaces-itcast/term197/taotao-manager-web/src/main/resources/resource/client.conf");
        // 二、建立一個TrackerClient對象。直接new一個。
        TrackerClient trackerClient = new TrackerClient();
        // 三、使用TrackerClient對象建立鏈接,得到一個TrackerServer對象。
        TrackerServer trackerServer = trackerClient.getConnection();
        // 四、建立一個StorageServer的引用,值爲null
        StorageServer storageServer = null;
        // 五、建立一個StorageClient對象,須要兩個參數TrackerServer對象、StorageServer的引用
        StorageClient storageClient = new StorageClient(trackerServer, storageServer);
        // 六、使用StorageClient對象上傳圖片。
        //擴展名不帶「.」
        String[] strings = storageClient.upload_file("D:/Documents/Pictures/images/200811281555127886.jpg", "jpg", null);
        // 七、返回數組。包含組名和圖片的路徑。
        for (String string : strings) {
            System.out.println(string);
        }
    }
}

使用工具類方法

@Test
    public void testFastDfsClient() throws Exception {
        FastDFSClient fastDFSClient = new FastDFSClient("D:/workspaces-itcast/term197/taotao-manager-web/src/main/resources/resource/client.conf");
        String file = fastDFSClient.uploadFile("D:/Documents/Pictures/images/2f2eb938943d.jpg");
        System.out.println(file);
    }

3、redis

Redisc語言開發的。

安裝redis須要c語言的編譯環境。若是沒有gcc須要在線安裝。yum install gcc-c++

 1.安裝步驟:

第一步:redis的源碼包上傳到linux系統。

第二步:解壓縮redis

第三步:編譯。進入redis源碼目錄。make

第四步:安裝。make install PREFIX=/usr/local/redis

PREFIX參數指定redis的安裝目錄。通常軟件安裝到/usr目錄下

 

詳解:

1.上傳redis-3.0.0.tar.gz並解壓(tar zxf redis-3.0.0.tar.gz )

2.進入redis(cd cd redis-3.0.0)

3.輸入  make (進行編譯)

4.安裝( make install PREFIX=/usr/local/redis)

5.進入redis的bin目錄(cd /usr/local/redis/bin/)

6.啓動服務端(./redis-server )(前端啓動,但會佔用一個)

  6.2也能夠採用後端啓動(crtl+c退出上一步)

  6.2.2 複製配置文件到當前目錄(cp ~/redis-3.0.0/redis.conf .)

 

  6.2.3編輯文件(vim redis.conf ),將daemonize no 改成daemonize yes

  6.2.4啓動服務端(後端形式)(./redis-server redis.conf )

  6.2.5經過查看端口查看是否運行(ps aux|grep redis)

7.能夠經過(./redis-cli )進行鏈接redis數據庫進行操做等

  7.1 能夠指定ip和端口號(./redis-cli -h 192.168.25.150 -p 6379)

2.redis的五種基本數據類型

2.1 String :key-value(作緩存)

  Redis中全部的數據都是字符串。命令不區分大小寫,key是區分大小寫的。Redis是單線程的。Redis中不適合保存內容大的數據。

  getset

  incr:加一(生成id

  Decr:減一

2.2Hash:key-fields-values(作緩存)

         Hset:向hash中添加內容

         Hget:從hash中取內容

2.3 List:有順序可重複

2.4 Set:元素無順序,不能重複

2.5 SortedSetzset):有順序,不能重複

 3.Jedis

 3.1加入jedis依賴或jar包

3.2

@Test
    public void testJedisPool() throws Exception{
        //建立一個數據庫鏈接池(單例),須要指定服務的ip和端口號
        JedisPool jedisPool = new JedisPool("192.168.25.150",6379);
        //從鏈接池中得到鏈接
        Jedis jedis = jedisPool.getResource();
        //使用jedis操做數據庫(方法級別使用)
        String result = jedis.get("jedis-key");
        System.out.println(result);
        //必定要關閉jedis鏈接
        jedis.close();
        //系統關閉前關閉鏈接池
        jedisPool.close();
    }

 

4.redis的集羣搭建(僞分佈式)

Redis集羣中至少應該有三個節點。要保證集羣的高可用,須要每一個節點有一個備份機。

Redis集羣至少須要6臺服務器。

搭建僞分佈式。可使用一臺虛擬機運行6redis實例。須要修改redis的端口號7001-7006(正常多個服務器搭建時,由於ip不一致,端口號不用修改便可)

步驟:

4.1在local目錄下(cd /usr/local/)創建文件夾複製已有的redis(cd /usr/local/redis/bin/)

    

4.2進入redis01目錄下(cd redis-cluster/redis01/)

4.3搭建集羣須要乾淨的節點,因此須要把dump.rdb刪除(rm -rf dump.rdb )

4.4修改端口號(vim redis.conf),並將集羣模式打開(將cluster-enabled yes的註釋打開)

 

4.5回到 redis-cluster目錄(cd ..)多複製幾份節點(cp -r redis01/ redis02)

 

4.6修改複製的各個的端口號(7002-7006)( vim redis02/redis.conf )

4.7啓動每一個redis(由於方便選擇批處理)

  4.7.1(vim start-all.sh)

  4.7.2寫入

cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..

  4.7.3修改執行權限(chmod +x start-all.sh)

  4.7.4執行(./start-all.sh)

  4.7.5判斷是否執行成功(ps aux|grep redis)

4.8使用ruby腳本搭建集羣,須要ruby運行環境

  4.8.1安裝ruby

yum install ruby
yum install rubygems

  4.8.2安裝Ruby須要的包

   ①.上傳redis-3.0.0.gem

   ②.回到根目錄(cd ~)安裝 (gem install redis-3.0.0.gem)

  ③.進入redis目錄下(cd redis-3.0.0/src/)

  ④.複製redis下的ruby腳本文件(redis-trib.rb)(cp *.rb /usr/local/redis-cluster/)

4.9回到集羣目錄(cd /usr/local/redis-cluster/)

4.10使用ruby腳本搭建集羣(./redis-trib.rb create --replicas 1 192.168.25.150:7001 192.168.25.150:7002 192.168.25.150:7003 192.168.25.150:7004 7001 192.168.25.150:7002 192.168.25.150:7003 192.168.25.150:7004 192.168.25.150:7005 192.168.25.150:7006)。

5.鏈接Redis集羣

5.1.使用redis-cli鏈接(redis01/redis-cli -p 7006 -c)

  注:端口號爲集羣中的任意節點,-c爲表明鏈接的是redis集羣

 

5.2使用jedisCluster鏈接集羣

@Test
    public void testJedisCluster() throws Exception{
        //建立一個JedisCluster對象,構造參數Set類型,集合中每一個元素HostAndPost類型
        Set<HostAndPort> nodes = new HashSet<>();
        //向集合中添加節點
        nodes.add(new HostAndPort("192.168.25.150", 7001));
        nodes.add(new HostAndPort("192.168.25.150", 7002));
        nodes.add(new HostAndPort("192.168.25.150", 7003));
        nodes.add(new HostAndPort("192.168.25.150", 7004));
        nodes.add(new HostAndPort("192.168.25.150", 7005));
        nodes.add(new HostAndPort("192.168.25.150", 7006));
        JedisCluster jedisCluster = new JedisCluster(nodes);
        //直接使用JedisCluster操做redis,自帶連接池JedisCluster對象能夠是單例的
        jedisCluster.set("cluster-test", "Hello");
        String string = jedisCluster.get("cluster-test");
        System.out.println(string);
        //系統關閉前關閉JedisCluster
        jedisCluster.close();
    }

6.JedisClient鏈接單機版

(添加package包及須要的文件)

 

6.1向spring容器中添加(能夠新建applicationContext-redis.xml文件管理單機版與集羣版)

<context:annotation-config></context:annotation-config><!--開啓註解-->
    <!-- redis單機版 -->
    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="host" value="192.168.25.88"></constructor-arg>
        <constructor-arg name="port" value="6379"></constructor-arg>
    </bean>

6.2使用測試

@Test
    public void testJedisClientPool() throws Exception{
        //初始化Spring容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-redis.xml");
        
        //從容器中得到JedisClient對象
        JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
        //使用JedisClient對象操做redis
        jedisClient.set("jedisclient", "mytest");
        String result = jedisClient.get("jedisclient");
        System.out.println(result);
        
    }

7.JedisClient鏈接集羣版

7.1向spring容器中添加(集羣版和單機版不使用的那個註釋便可)

<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
        <constructor-arg>
            <set>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.25.150"></constructor-arg>
                    <constructor-arg name="port" value="7001"></constructor-arg>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.25.150"></constructor-arg>
                    <constructor-arg name="port" value="7002"></constructor-arg>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.25.150"></constructor-arg>
                    <constructor-arg name="port" value="7003"></constructor-arg>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.25.150"></constructor-arg>
                    <constructor-arg name="port" value="7004"></constructor-arg>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.25.150"></constructor-arg>
                    <constructor-arg name="port" value="7005"></constructor-arg>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.25.150"></constructor-arg>
                    <constructor-arg name="port" value="7006"></constructor-arg>
                </bean>
            </set>
        </constructor-arg>
    </bean>
    <bean id="jedisClientCluster" class="com.taotao.jedis.JedisClientCluster"></bean>

 

4、solr  

5、ActiveMQ

ActiveMQ Apache出品,最流行的,能力強勁的開源消息總線。

1. ActiveMQ的消息形式

 

  對於消息的傳遞有兩種類型:

 

  一種是點對點的,即一個生產者和一個消費者一一對應;

 

  另外一種是發佈/訂閱模式,即一個生產者產生消息並進行發送後,能夠由多個消費者進行接收。

 

2. 安裝(須要jdk環境)與啓動:

2.1 上傳壓縮包(apache-activemq-5.12.0-bin.tar.gz)並解壓縮(tar zxf apache-activemq-5.12.0-bin.tar.gz)

2.2進入activemq的bin目錄(cd apache-activemq-5.12.0/bin/)

2.3啓動 ./activemq start

2.4查看是否啓動成功  ps aux|grep activemq

  也能夠經過訪問192.168.25.150:8161/admin(帳號密碼都爲admin)

  注:在頁面點Queues若是出現503錯誤,說明linux主機名和ip未對應(查看機器名(cat /etc/sysconfig/network)(HOSTNAME爲機器名,若是帶.的只顯示.前面的)查看ip與機器名對應關係(cat /etc/hosts)(沒有本身的機器名能夠把本身的機器名加到後面,修改完成重啓activemq服務))

  

相關文章
相關標籤/搜索