Dubbo学习笔记2-配置
1. API配置
1.1定义接口
定义一个服务接口,并将接口打包提供给“服务提供者”和“服务消费者”使用,代码如下
package org.dubbo.api;
public interface UserService {
public String sayHello(String name);
}
1.2服务提供者
1) 导入必须的jar包,可以通过maven方式。
log4j,slf4j-api,slf4j-log4j12,dubbo,zkclient。
2) 定义一个服务类,实现服务接口UserService,代码如下。
package org.dubbo.provider.api;
import java.io.IOException;
import org.dubbo.api.UserService;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
public class UserServiceApiImpl implements UserService {
@Override
public String sayHello(String name) {
return "Hello "+name+" , This is Api method!";
}
public static void main(String[] args) throws IOException {
ApplicationConfig application = new ApplicationConfig();
application.setName("userServiceApiProvider");
RegistryConfig registry = new RegistryConfig();
registry.setAddress("127.0.0.1:2181");
registry.setProtocol("zookeeper");
ProtocolConfig protocol = new ProtocolConfig();
protocol.setName("dubbo");
protocol.setPort(20880);
ServiceConfig<UserService> services = new ServiceConfig<UserService>();
services.setApplication(application);
services.setRegistry(registry);
services.setProtocol(protocol);
services.setInterface(UserService.class);
services.setRef(new UserServiceApiImpl());
services.export();
System.out.println("Api provider start...");
System.in.read();
}
}
3) 启动,前提必须先启动zookeeper。
1.3 服务消费者
1) 导入必须的jar包,可以通过maven方式。
log4j,slf4j-api,slf4j-log4j12,dubbo,zkclient。
2) 书写消费端代码如下:
package org.dubbo.consumer.api;
import org.dubbo.api.UserService;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
public class ApiConsumer {
public static void main(String[] args) {
ApplicationConfig application = new ApplicationConfig();
application.setName("userServiceApiConsumer");
RegistryConfig registry = new RegistryConfig();
registry.setAddress("127.0.0.1:2181");
registry.setProtocol("zookeeper");
ReferenceConfig<UserService> references = new ReferenceConfig<UserService>();
references.setApplication(application);
references.setRegistry(registry);
references.setInterface(UserService.class);
UserService service = references.get();
System.out.println(service.sayHello("ApiConsumer"));
}
}
3) 启动消费,得到结果。
2.XML配置
2.1 定义接口
定义一个服务接口,并将接口打包提供给“服务提供者”和“服务消费者”使用,代码如下
package org.dubbo.api;
public interface UserService {
public String sayHello(String name);
}
2.2 服务提供者
1) 导入必须的jar包,可以通过maven方式。
spring-core,spring-aop,spring-context-support,log4j,slf4j-api,slf4j-log4j12,dubbo,zkclient
2) 定义一个服务类,实现服务接口UserService,代码如下
package org.dubbo.provider.xml;
import java.io.IOException;
import org.dubbo.api.UserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserServiceXmlImpl implements UserService {
@Override
public String sayHello(String name) {
return "Hello "+name+" , This is XML method";
}
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:provider.xml");
System.out.println(context.getDisplayName() + ": here");
context.start();
System.out.println("Xml Provider start...");
System.in.read();
context.close();
}
}
3) 使用spring的xml配置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-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
<dubbo:application name="userServiceXmlProvider" owner="linwu" organization="dubbox"/>
<!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!--使用 dubbo 协议实现定义好的 org.dubbo.api.UserService 接口-->
<dubbo:service interface="org.dubbo.api.UserService" ref="demoService" protocol="dubbo" />
<!--具体实现该接口的 bean-->
<bean id="demoService" class="org.dubbo.provider.xml.UserServiceXmlImpl"/>
</beans>
4) 启动,前提必须先启动zookeeper。
2.3 服务消费者
1) 导入必须的jar包,可以通过maven方式。
spring-core,spring-aop,spring-context-support,log4j,slf4j-api,slf4j-log4j12,dubbo,zkclient
2) 书写消费端代码如下:
package org.dubbo.consumer.xml;
import org.dubbo.api.UserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class XmlConsumer {
public static void main(String[] args) {
//测试常规服务
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("consumer.xml");
context.start();
System.out.println("consumer start");
UserService service = (UserService) context.getBean("xmlService");
System.out.println("consumer");
System.out.println(service.sayHello("XmlConsumer"));
context.close();
}
}
3) 使用spring的xml配置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-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
<dubbo:application name="userServiceXmlConsumer" owner="linwu" organization="dubbox"/>
<!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!--使用 dubbo 协议调用定义好的 org.dubbo.api.UserService 接口-->
<dubbo:reference id="xmlService" interface="org.dubbo.api.UserService"/>
</beans>
4) 启动消费,得到结果。
3. 注解配置
3.1 定义接口
定义一个服务接口,并将接口打包提供给“服务提供者”和“服务消费者”使用,代码如下
package org.dubbo.api;
public interface UserService {
public String sayHello(String name);
}
3.2 服务提供者
1) 导入必须的jar包,可以通过maven方式。
spring-core,spring-aop,spring-context-support,log4j,slf4j-api,slf4j-log4j12,dubbo,zkclient
2) 定义一个服务类,继承服务接口,并做注解,代码如下:
package org.dubbo.provider.annotation;
import java.io.IOException;
import org.dubbo.api.UserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.alibaba.dubbo.config.annotation.Service;
@Service
public class UserServiceAnnotationImpl implements UserService {
@Override
public String sayHello(String name) {
return "Hello "+name+" , This is Annotation method";
}
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:annotation-provider.xml");
System.out.println(context.getDisplayName() + ": here");
context.start();
System.out.println("Annotation Provider start...");
System.in.read();
context.close();
}
}
3) 使用spring的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-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
<dubbo:application name="userServiceAnnotationProvider" owner="linwu" organization="dubbox"/>
<!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->
<dubbo:annotation package="org.dubbo.provider.annotation" />
</beans>
4) 启动,前提必须先启动zookeeper。
3.3 服务消费者
1) 导入必须的jar包,可以通过maven方式。
spring-core,spring-aop,spring-context-support,log4j,slf4j-api,slf4j-log4j12,dubbo,zkclient
2) 书写消费端代码如下:
package org.dubbo.consumer.annotation;
import org.dubbo.api.UserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Reference;
@Component
public class AnnotationConsumer {
@Reference
private UserService userService;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public static void main(String[] args) {
//测试常规服务
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("annotation-consumer.xml");
context.start();
System.out.println("consumer start");
AnnotationConsumer annotationConsumer = (AnnotationConsumer) context.getBean("annotationConsumer");
System.out.println("consumer");
System.out.println(annotationConsumer.getUserService().sayHello("AnnotationConsumer"));
context.close();
}
}
3) 使用spring的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-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
<dubbo:application name="userServiceXmlConsumer" owner="linwu" organization="dubbox"/>
<!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->
<dubbo:annotation package="org.dubbo.consumer.annotation" />
</beans>
4) 启动消费,得到结果。
4. 属性配置
定义接口
服务提供者
服务消费者
5. 配置顺序
1) 方法配置>接口配置>全局配置
2) 如果级别一样,则消费方>服务方
3) JVM的-D设置>XML配置>properties配置