您的当前位置:首页正文

分布式信息交互平台服务者与消费者构建指导手册

2024-05-02 来源:我们爱旅游


服务提供者与消费者构建指导书

1.提供者部署

暴露服务方称之为“服务提供者”。

服务提供者创建步聚:

1、 引入分布式信息交互平台提供方提供的创建服务提供者所需的jar文件,构建创建服务提供者环境。

2、 创建所要提供服务的接口,如提供者demo:Test_provider中定义的com.radiocom.demo.DemoService;接口名称可以按自己需要随便取,与消费者要调用的服务接口对应。在接口中定义所要提供的方法,如demo中DemoService接口定义了一个sayHello(String name)方法。用户可根据自己需要定义若干个方法。

3、 针对提供服务的接口创建实现类。在实现类中按需要提供方法的实现细节。参见com.radiocom.demo.DemoServiceImpl类。实现了接口中sayHello(String name)方法。此步即为客户提供服务的具体内容,后续用于暴露给消费者调用。

4、 创建提供者类,参见类DemoProvider,在main方法中实现服务的暴露及注册。当运行提供者后,定义的服务com.radiocom.demo.DemoService会被注册到所连接的注册中心,以便连接到同一注册中心的消费者根据服务名查找并订阅此服务。订阅成功后,消费者便可对提供者进行远程服务的调用。

DemoProvider.java

// 提供者服务的实现,这是用户暴露服务细节的核心

DemoService demoService = new DemoServiceImpl();

// 当前应用配置

ApplicationConfig application = new ApplicationConfig();

application.setName(\"demo-provider\");

// 连接注册中心配置

RegistryConfig registry = new RegistryConfig();

//注册中心信息根据部署注册中心而来

registry.setAddress(\"zookeeper://192.168.15.249:2181\");

registry.setUsername(\"root\");

registry.setPassword(\"123456\");

// 服务提供者协议配置

ProtocolConfig protocol = new ProtocolConfig();

protocol.setName(\"dubbo\");

protocol.setPort(20880);

protocol.setThreads(200);

// 服务提供者暴露服务配置

ServiceConfig service = new ServiceConfig();

service.setApplication(application);

service.setRegistry(registry); service.setProtocol(protocol);

service.setInterface(DemoService.class);

service.setRef(demoService);

service.setVersion(\"1.0.0\");

// 暴露及注册服务到注册中心,目的是方便消费者通过注册中心订阅

service.export();

2.消费者部署

调用远程服务方称之为“服务消费者”。

服务消费者创建步聚:

1、 引入分布式信息交互平台提供方提供的创建服务消费者所需的jar文件。构件创建服务消费者环境。

2、 创建服务接口,注:此接口必须与所调用的提供者提供的服务接口一致,注:包名,接口名及结构必须完全一致,接口中定义的方法也必须一致对应。因消费者启动后,会向注册中心根据服务名称查找提供者。此处定义的接口相当于为消费者在注册中心查找服务提供名称,参见Test_consumer中也必有与提供者完全相同的接口com.radiocom.demo.DemoService和接口中定义的方法。

3、 创建消费者类,参见类DemoConsumer,在main方法中实现对提供者服务的远程引用及调用。当启动消费者后(当然前提是它所调用的提供者首先启动成功),通过提供者与消费者共同连接的注册中心,根据服务名称(通常是服务接口全名加版本号的连接字符串)查找提供者已注册的服务。找到后引用提供者服务。接下来根据需要调用提供方服务提供的方法,在消费方返回方法调用的结果,以此达到远程服务调用的目的。DemoConsumer中调用的DemoService的sayHello(String name)的方法实质上调用的是提供方服务的方法。消费方的服务只是一个与提供方服务一致的接口规范,不需要具体实现。方法返回的是提供者服务接口的实现方法。

DemoConsumer.java

// 当前应用配置

ApplicationConfig application = new ApplicationConfig();

application.setName(\"demo-consumer\");

// 连接注册中心配置

RegistryConfig registry = new RegistryConfig();

registry.setAddress(\"zookeeper://192.168.15.249:2181\");

registry.setUsername(\"root\");

registry.setPassword(\"123456\");

// 引用远程服务

ReferenceConfig reference = new

ReferenceConfig();

reference.setApplication(application);

reference.setRegistry(registry); reference.setInterface(DemoService.class);

reference.setVersion(\"1.0.0\");

// 暴露及注册服务

// 和本地bean一样使用xxxService

//得到的是对提供者服务的引用

demoService = reference.get();

for (int i = 0; i < Integer.MAX_VALUE; i ++)

{

try {

//远程调用提供者服务接口的实现方法,来自provider方

String hello = demoService.sayHello(\"world\" + i);

System.out.println(\"444444[\" + new SimpleDateFormat(\"HH:mm:ss\").

format(new Date()) + \"] \" + hello);

} catch (Exception e) {

e.printStackTrace();

}

try {

Thread.sleep(2000);

catch (InterruptedException e) {

e.printStackTrace();

}

因篇幅问题不能全部显示,请点此查看更多更全内容