学习Dubbo之HelloWorld

Dubbo的学习之路

1、开发所需工具的准备

JDK

  • 使用jdk1.8(没有的需先行下载)

zookeeper

(1)、zookeeper下载链接(本项目使用的是windows版本的zookeeper-3.4.14)

(2)、zookeeper的安装步骤:

  • 解压 zookeeper-3.4.14.tar.gz(本人下载在 E:\Java目录下)
  • 进入到 E:\Java\zookeeper-3.4.14\conf 目录
  • 复制一份zoo_sample.cfg文件,再将名字改为zoo.cfg
  • E:\Java\zookeeper-3.4.14目录下创建 data文件夹和log文件夹
  • 修改zoo.cfg文件中的配置
    • 将dataDir对应的路径改为E:/Java/zookeeper-3.4.14/data
    • 再新增 dataLogDir=E:/Java/zookeeper-3.4.14/log
  • 启动zookeeper服务端
    • 进入到E:\Java\zookeeper-3.4.14\bin目录下找到zkServer.cmd命令脚本点击即可
  • 启动zookeeper客户端
    • 进入到E:\Java\zookeeper-3.4.14\bin目录下找到zkCli.cmd命令脚本点击即可
  • 验证是否启动成功
    • 启动zkCli.cmd后能在命令窗口中看见Welcome to ZooKeeper!
    • 或者通过 netstat -a 进行查看当前系统所有线程的端口,找到2181就说明启动成功。

2、项目创建

(1)通过maven创建provider项目

<1>在provider项目的pom文件中引入jar包
 <dependencies>
        <!--使用zookeeper当注册中心-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
            <version>2.7.2</version>
        </dependency>
        <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-configcenter-zookeeper</artifactId>
             <version>2.7.2</version>
         </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-rpc-dubbo</artifactId>
            <version>2.7.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-config-spring</artifactId>
            <version>2.7.2</version>
        </dependency>
        <!--使用netty4作为容器-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-remoting-netty4</artifactId>
            <version>2.7.2</version>
         </dependency>
        <!--使用hessian2作为远程序列化-->
         <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-serialization-hessian2</artifactId>
            <version>2.7.2</version>
        </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
             <version>1.7.25</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>1.7.25</version>
         </dependency>
    </dependencies>
<2> 资源配置

新建dubbo.properties文件并配置以下

#应用名称
dubbo.application.name=myProvider
#注册地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#配置包的扫描
scan_base_packages=com.yanhj.provider
#协议类型
dubbo.protocol.name=dubbo
#协议端口
dubbo.protocol.port=20880

新建log4j.properties文件并配置以下

###set log levels###
log4j.rootLogger=info, stdout
###output to the console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy HH:mm:ss:SSS z}] %t %5p %c{2}: %m%n
<3> java实现代码

创建DemoService接口

package com.yanhj.provider;
/*
 *  对外接口
 */
public interface DemoService {
    String sayHello(String name);
}

创建DemoServiceImpl类,并实现DemoService接口

package com.yanhj.provider;

import org.apache.dubbo.config.annotation.Service;

/**
 * 具体实现
 * 此处的@Service注解必须使用dubbo包中的
 */
@Service
public class DemoServiceImpl implements DemoService {
    public String sayHello(String name) {
        return "Hello " + name;
    }
}
<4>创建启动类
package com.yanhj;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 服务启动类
 * @EnableDubbo激活Dubbo
 */
@EnableDubbo
public class APP {
    public static void main(String[] args) throws Exception {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(APP.class);
        context.start();
        System.in.read();
    }
}
<4>将该项目通过maven打成jar包,并install到maven库中,需要在comsumer项目pom中引入

(2)通过maven创建comsumer项目

<1>在comsumer项目的pom文件中引入jar包
    <dependencies>
        <!--该依赖是先前创建的Provider项目通过maven打成的jar,此处的groupId和artifactId根据实际的Provider项目而定-->
        <dependency>
            <groupId>myDubbo-HelloWorld-Provider</groupId>
            <artifactId>com.yanhj</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--注册中心-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
            <version>2.7.2</version>
        </dependency>
    </dependencies>
<2> 资源配置

新建dubbo.properties文件并配置以下

#应用名称
dubbo.application.name=myConsumer
#注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
<3> java实现代码

创建DemoServiceComponent类

package com.yhj.consumer;

import com.yanhj.provider.DemoService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;

@Component("demoServiceComponent")
public class DemoServiceComponent {
    @Reference
    private DemoService demoService;

    public String sayHello(String s) {
        return demoService.sayHello(s);
    }
}
<4>创建启动类

创建Consumer启动类

package com.yhj.consumer;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

/**
 * @ComponentScan注解用于扫描带有@Component注解的类(DemoServiceComponent类)
 * @EnableDubbo 激活Dubbo
 */
@ComponentScan(value = {"com.yhj.consumer"})
@EnableDubbo
public class Consumer {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext  context = new AnnotationConfigApplicationContext(Consumer.class);
        context.start();
        DemoServiceComponent service = (DemoServiceComponent)context.getBean("demoServiceComponent");
        String hello = service.sayHello("world");
        System.out.println("result :" + hello);
    }

}

3、项目运行

1、启动provider项目

​ 直接启动类即可。

2、启动Consumer项目

​ 直接启动类即可。

4、最终效果

控制台中会数据 result :Hello world 数据

[09/12/19 22:33:28:238 CST] main  INFO transport.AbstractClient:  [DUBBO] Succeed connect to server /192.168.174.1:20880 from NettyClient 192.168.174.1 using dubbo version 2.7.2, channel is NettyChannel [channel=[id: 0xc06ee474, L:/192.168.174.1:55413 - R:/192.168.174.1:20880]], dubbo version: 2.7.2, current host: 192.168.174.1
[09/12/19 22:33:28:238 CST] main  INFO transport.AbstractClient:  [DUBBO] Start NettyClient yanhj/192.168.174.1 connect to the server /192.168.174.1:20880, dubbo version: 2.7.2, current host: 192.168.174.1
[09/12/19 22:33:28:323 CST] main  INFO config.AbstractConfig:  [DUBBO] Refer dubbo service com.yanhj.provider.DemoService from url zookeeper://127.0.0.1:2181/org.apache.dubbo.registry.RegistryService?anyhost=true&application=myConsumer&bean.name=ServiceBean:com.yanhj.provider.DemoService&check=false&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.yanhj.provider.DemoService&lazy=false&methods=sayHello&pid=8108&register=true&register.ip=192.168.174.1&release=2.7.2&remote.application=myProvider&revision=1.0-SNAPSHOT&side=consumer&sticky=false&timestamp=1575902006426, dubbo version: 2.7.2, current host: 192.168.174.1
result :Hello world
[09/12/19 22:33:28:643 CST] Thread-0  INFO annotation.AnnotationConfigApplicationContext: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@1f95c5d: startup date [Mon Dec 09 22:33:25 CST 2019]; root of context hierarchy
[09/12/19 22:33:28:644 CST] Thread-0  INFO support.AbstractRegistryFactory:  [DUBBO] Close all registries [zookeeper://127.0.0.1:2181/org.apache.dubbo.registry.RegistryService?application=myConsumer&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&pid=8108&release=2.7.2&timestamp=1575902006881], dubbo version: 2.7.2, current host: 192.168.174.1
[09/12/19 22:33:28:644 CST] Thread-0  INFO zookeeper.ZookeeperRegistry:  [DUBBO] Destroy registry:zookeeper://127.0.0.1:2181/org.apache.dubbo.registry.RegistryService?application=myConsumer&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&pid=8108&release=2.7.2&timestamp=1575902006881, dubbo version: 2.7.2, current host: 192.168.174.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值