服务提供者与消费者构建指导书
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.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 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(); } 因篇幅问题不能全部显示,请点此查看更多更全内容