The most common way to use Dubbo is to run it in Spring framework. The following content will guide you to develop a Dubbo application with Spring framework‘s XML configuration.
最普遍的方式去使用dubbo就在spring框架中运行。以下内容会指引你去开发一个使用spring框架xml配置的dubbo程序。
If you don‘t want to rely on Spring, you can try using API configuration.
如果你不想依赖spring, 你可以尝试使用api配置。
First let‘s create a root directory called dubbo-demo:
首先让我们创建一个叫buddo-demo的主目录
mkdir dubbo-demo
cd dubbo-demo
Next, we are going to create 3 sub-directories under root directory:
下一步,我们要在主目录下创建三个子目录:
服务提供者
定义服务接口
DemoService.java 1:
package org.apache.dubbo.demo;
public interface DemoService {
String sayHello(String name);
}
The project structure should look like this:
项目结构应该看起来是这样子的:
.
├── dubbo-demo-api
│ ├── pom.xml
│ └── src
│ └── main
│ └── java
│ └── org
│ └── apache
│ └── dubbo
│ └── demo
│ └── DemoService.java
在服务提供者里实现接口:
DemoServiceImpl.java 2:
package org.apache.dubbo.demo.provider;
import org.apache.dubbo.demo.DemoService;
public class DemoServiceImpl implements DemoService {
public String sayHello(String name) {
return "Hello " + name;
}
}
使用spring配置暴漏服务
provider.xml:
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- provider‘s application name, used for tracing dependency relationship -->
<dubbo:application name="demo-provider"/>
<!-- use multicast registry center to export service -->
<dubbo:registry address="multicast://224.5.6.7:1234"/>
<!-- use dubbo protocol to export service on port 20880 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- service implementation, as same as regular local bean -->
<bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/>
<!-- declare the service interface to be exported -->
<dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService"/>
</beans>
The demo uses multicast as the registry since it is simple and does not require to extra installation. If you prefer a registry like zookeeper, please check out examples here.
案例使用多播作为注册中心,由于简单并且不需要额外的安装。如果你倾向于一个类似zookeeper这种注册中心,请查阅例子。
配置日志系统
Dubbo use log4j as logging system by default, it also support slf4j, Apache Commons Logging, and JUL logging.
Dubbo默认使用log4k作为日志系统,它也支持slf4j, Apache通用Logging和JUL日志 Logging。
Following is a sample configuration:
一下是配置的样例:
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
Provider.java
package org.apache.dubbo.demo.provider;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Provider {
public static void main(String[] args) throws Exception {
System.setProperty("java.net.preferIPv4Stack", "true");
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"});
context.start();
System.out.println("Provider started.");
System.in.read(); // press any key to exit
}
}
Finally, the project structure should look like this:
最终,项目结构看起来应该是这样子:
├── dubbo-demo-provider
│ ├── pom.xml
│ └── src
│ └── main
│ ├── java
│ │ └── org
│ │ └── apache
│ │ └── dubbo
│ │ └── demo
│ │ └── provider
│ │ ├── DemoServiceImpl.java
│ │ └── Provider.java
│ └── resources
│ ├── META-INF
│ │ └── spring
│ │ └── dubbo-demo-provider.xml
│ └── log4j.properties
Complete installation steps, see:Consumer demo installation
完成安装步骤: 参考 Consumer demo installation
使用spring配置去引用一个远程服务。
consumer.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- consumer‘s application name, used for tracing dependency relationship (not a matching criterion),
don‘t set it same as provider -->
<dubbo:application name="demo-consumer"/>
<!-- use multicast registry center to discover service -->
<dubbo:registry address="multicast://224.5.6.7:1234"/>
<!-- generate proxy for the remote service, then demoService can be used in the same way as the
local regular interface -->
<dubbo:reference id="demoService" check="false" interface="org.apache.dubbo.demo.DemoService"/>
</beans>
Consumer.java 3:
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.apache.dubbo.demo.DemoService;
public class Consumer {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"META-INF/spring/dubbo-demo-consumer.xml"});
context.start();
// Obtaining a remote service proxy
DemoService demoService = (DemoService)context.getBean("demoService");
// Executing remote methods
String hello = demoService.sayHello("world");
// Display the call result
System.out.println(hello);
}
}
配置日志系统
This is the same as how to config it on provider side.
跟提供端配置方式一样。
Finally, the project structure should be look like this:
最总,项目结构看起来应该是这个样子:
├── dubbo-demo-consumer
│ ├── pom.xml
│ └── src
│ └── main
│ ├── java
│ │ └── org
│ │ └── apache
│ │ └── dubbo
│ │ └── demo
│ │ └── consumer
│ │ └── Consumer.java
│ └── resources
│ ├── META-INF
│ │ └── spring
│ │ └── dubbo-demo-consumer.xml
│ └── log4j.properties
启动demo
启动服务提供者
Run the org.apache.dubbo.demo.provider.Provider
class to start the provider.
运行org.apache.dubbo.demo.provider.Provider类去启动提供者
启动服务消费者
Run the org.apache.dubbo.demo.provider.Consumer
class to start the consumer, and you should be able to see the following result:
运行 org.apache.dubbo.demo.provider.Consumer
class去启动消费者,并且你应该可以看到以下结果:
Hello world
完整例子
You can find the complete example code in the Github repository.
你可以在Github仓库找到完整的例子。
原文:https://www.cnblogs.com/zhijicompanyethan/p/13928544.html