zoukankan      html  css  js  c++  java
  • dubbo 图片服务器(FastDFS) redis solr ActiveMQ等简单配置使用

    一、dubbo

    项目基于soa的架构,表现层和服务层是不同的工程。所以要实现商品列表查询需要两个系统之间进行通信。

    1.1如何实现远程通信?

    1、Webservice:效率不高基于soap协议。项目中不推荐使用。

    2、使用restful形式的服务:http+json。很多项目中应用。如果服务太多,服务之间调用关系混乱,需要治疗服务。(跨语言)

    3、使用dubbo。使用rpc协议进行远程调用,直接使用socket通信。传输效率高,并且可以统计出系统之间的调用关系、调用次数。(只能用于java工程之间)

    1.2 什么是dubbo

    Dubbo就是资源调度和治理中心的管理工具。(阿里开源分布式工具)

    1.3  Dubbo的架构

    节点角色说明:

    Provider: 暴露服务的服务提供方。

    Consumer: 调用远程服务的服务消费方。

    Registry: 服务注册与发现的注册中心。

    Monitor: 统计服务的调用次调和调用时间的监控中心。

    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地址改为对应的即可)

    二、图片上传服务器

    使用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. 上传步骤

    1、加载配置文件,配置文件中的内容就是tracker服务的地址。

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

    2、创建一个TrackerClient对象。直接new一个。

    3、使用TrackerClient对象创建连接,获得一个TrackerServer对象。

    4、创建一个StorageServer的引用,值为null

    5、创建一个StorageClient对象,需要两个参数TrackerServer对象、StorageServer的引用

    6、使用StorageClient对象上传图片。

    7、返回数组。包含组名和图片的路径。

    测试代码

    public class FastDFSTest {
    
        @Test
        public void testFileUpload() throws Exception {
            // 1、加载配置文件,配置文件中的内容就是tracker服务的地址。
            ClientGlobal.init("D:/workspaces-itcast/term197/taotao-manager-web/src/main/resources/resource/client.conf");
            // 2、创建一个TrackerClient对象。直接new一个。
            TrackerClient trackerClient = new TrackerClient();
            // 3、使用TrackerClient对象创建连接,获得一个TrackerServer对象。
            TrackerServer trackerServer = trackerClient.getConnection();
            // 4、创建一个StorageServer的引用,值为null
            StorageServer storageServer = null;
            // 5、创建一个StorageClient对象,需要两个参数TrackerServer对象、StorageServer的引用
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            // 6、使用StorageClient对象上传图片。
            //扩展名不带“.”
            String[] strings = storageClient.upload_file("D:/Documents/Pictures/images/200811281555127886.jpg", "jpg", null);
            // 7、返回数组。包含组名和图片的路径。
            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);
        }

    三、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>

    四、solr  

    五、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服务))

      

  • 相关阅读:
    百度多图上传
    uploadify--上传文件控件
    JS获取时间
    CSS选择器
    派大星博客的美化之路
    百度地图--JS版
    css实现元素下出现横线动画
    盒模型显隐、定位与流式布局思想
    css进度条
    Build Sharepoint 2013 Farm
  • 原文地址:https://www.cnblogs.com/jokerq/p/9315113.html
Copyright © 2011-2022 走看看