一、在spring项目中如何使用dubbo远程调用接口
实现远程调用接口,那么至少需要一个客户端,一个服务端程序。
在这里,我分别利用IDEA 创建2个maven项目(maven-archetype-quickstart)。一个客户端:dubbo-client
,一个服务端:dubbo-server
。其中服务端dubbo-server
中创建两个模块(maven-archetype-quickstart),一个是服务端接口:server-api
,另一个是实现服务端接口的类:server-provider
。
图片 |
---|
1、创建dubboserver项目
创建maven项目
图片 |
---|
项目创建完成后,在dubboserver项目下接着创建两个maven模块:server-api
,server-provider
。
图片 |
---|
创建server-api
图片 |
---|
同理,可创建server-provider模块。
2.创建dubboClient项目
步骤类同上面的创建dubboserver项目。
代码实践:dubbo-server
位置:
dubbo-server
–>server-api
创建抽象接口
清单1: 服务端 提供的api
package com.gupaoedu.dubbo;
/**
* 服务端 提供的api 接口
*/
public interface IGpHello {
String sayHello(String msg);
}
位置:
dubbo-server
–>server-provider
创建抽象接口(IGpHello)的实现类
清单2:服务端IGpHello的实现类GpHelloImpl
package com.gupaoedu.dubbo;
/**
* Server-provider
* 对服务端接口的实现
*/
public class GpHelloImpl implements IGpHello{
@Override
public String sayHello(String msg) {
return "Hello"+msg;
}
}
位置:
dubbo-server
–>server-provider
–>pom.xml
导入依赖
清单3、导入依赖
<!-- TODO 方式一 -->
<!--服务端 实现接口 API start-->
<!-- 客户端 依赖这个jar 包-->
<dependency>
<groupId>com.gupaoedu.dubbo</groupId>
<artifactId>server-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
位置:
dubbo-server
–>server-provider
–>dubbo-server.xml
需要将其中的jar安装 到本地仓库中去
图片 |
---|
位置:
dubbo-server
–>server-provider
–>dubbo-server.xml
创建dubbo-server.xml dubbo服务端配置文件
清单4、配置dubbo服务端配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--提供方信息-->
<dubbo:application name="dubbo-server" owner="Cindy"/>
<!--注册中心 不需要 N/A-->
<dubbo:registry address="N/A"/>
<!--配置协议-->
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="com.gupaoedu.dubbo.IGpHello" ref="gpHelloService"/>
<bean id="gpHelloService" class="com.gupaoedu.dubbo.GpHelloImpl"/>
</beans>
位置:
dubbo-server
–>server-provider
创建启动类:Bootstrap
清单5、创建启动类:Bootstrap
package com.gupaoedu.dubbo;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
public class Bootstrap {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context=
new ClassPathXmlApplicationContext("/META-INF/spring/dubbo-server.xml");
context.start();
System.in.read();// 阻塞当前进程
}
}
启动Bootstrap
图片 |
---|
控制台输出的url便是接口的地址。
代码实践:dubbo-Client
位置:
dubbo-cliient
–>pom.xml
导入依赖
清单6:导入依赖
<!--客户端 依赖 服务端实现接口中的jar 包-->
<dependency>
<groupId>com.gupaoedu.dubbo</groupId>
<artifactId>server-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--dubbo 依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
位置:
dubbo-cliient
–>dubbo-client.xml
创建客户端配置文件:dubbo-client.xml
清单7:创建客户端配置文件:dubbo-client.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--提供方信息-->
<dubbo:application name="dubbo-client" owner="Cindy"/>
<!-- TODO N方式1 -->
<!--注册中心 不需要 N/A-->
<dubbo:registry address="N/A"/>
<!--配置协议-->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- TODO 方式一 远程调用接口地址 -->
<dubbo:reference id="gpHelloService" interface="com.gupaoedu.dubbo.IGpHello"
url="dubbo://192.168.0.116:20880/com.gupaoedu.dubbo.IGpHello"/>
</beans>
位置:
dubbo-cliient
创建一个调用服务类:APP
清单8:客户端远程调用服务
package com.gupaoedu.dubbo;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App
{
public static void main( String[] args )
{
ClassPathXmlApplicationContext context=
new ClassPathXmlApplicationContext("/META-INF/spring/dubbo-client.xml");
// 得到IGhello远程访问对象
IGpHello iGpHello=(IGpHello)context.getBean("gpHelloService");
System.out.println(iGpHello.sayHello("Cindy") );
}
}
现在我们启动这个APP类,能够在控制台看到输出:
HelloCindy
。即说明调用成功。
二、dubbo 如何结合zookeeper 实现服务注册
上面的叙述只是调用一个接口,当调用的接口很多时,我们就得利用中间件来注册、获取服务接口信息。
代码实践:dubbo-server
位置:
dubbo-server
–>server-provider
–>pom.xml
添加依赖:
清单9:zookeeper,zkCli
<!-- TODO 方式二 -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
位置:
dubbo-server
–>server-provider
–>dubbo-server.xml
修改dubbo:registry
清单10:dubbo:registry 修改
<!--注册中心: 利用zookeeper 将信息注册到zookeeper-->
<dubbo:registry address="zookeeper://192.168.0.11:2181"/>
以上两步是关于服务端的修改,好,我们启动服务端的启动类:Bootstrap。
然后打开zookeeper的客户端查看
图片 |
---|
能够看到 zookeeper为了存储信息 创建的节点。
代码实践:dubbo-client
位置:
dubbo-client
–>pom.xml
添加依赖:
清单11:添加依赖
<!-- TODO 方式二 -->
<!--使用zookeeper 获取注册信息-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
位置:
dubbo-client
–>dubbo-client.xml
修改配置文件中的
dubbo:registry
和dubbo:reference
清单12:修改配置文件
<!-- TODO 方式2 -->
<!--注册中心 -->
<dubbo:registry address="zookeeper://192.168.0.11:2181"/>
<!-- TODO 方式二 远程调用接口地址 -->
<dubbo:reference id="gpHelloService" interface="com.gupaoedu.dubbo.IGpHello"/>
好了,这时候我们启动客户端APP类来远程调用接口。