​https://github.com/apache/incubator-dubbo-spring-boot-project.git​

dependencies

<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.4</version>
</dependency>

千万不要使用以下依赖(已废弃)

<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>

另外,如果你的公共包如​​xx-common​​​也引用了dubbo,请在​​xx-common​​​里加上​​<optional>true</optional>​

provider

application.yml

dubbo:
registry:
protocol: zookeeper
address: 127.0.0.1:2181
id: my-registry
protocol:
port: 20882
name: dubbo
status: server
id: dubbo
application:
name: demo-provider
id: demo-provider
qosEnable: true
qosPort: 22223
scan:
basePackages: org.hongxi.whatsmars.dubbo.demo.provider.service

provider

@Service(version = "1.0.0")
public class DemoServiceImpl implements DemoService {

@Autowired
private UserService userService;

public String sayHello(String name) {
boolean registerSuccess = userService.register(name);
System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
return "Hello " + name + ", registerSuccess:" + registerSuccess + ", response form provider: " + RpcContext.getContext().getLocalAddress();
}

}

consumer

application.yml

dubbo:
registry:
protocol: zookeeper
address: 127.0.0.1:2181
id: my-registry
protocol:
port: 20882
name: dubbo
id: dubbo
application:
name: demo-consumer
id: demo-consumer
qosEnable: true
qosPort: 22224

consumer

/**
* Created by javahongxi on 2017/12/4.
* 将服务调用包装,可以方便进行调用监控
*/
@Component
public class DemoRpc {

@Reference(version = "1.0.0")
private DemoService demoService;

public String sayHello(String name) {
String result = null;
try {
result = demoService.sayHello(name);
} catch (Exception e) {
// log
e.printStackTrace();
}
return result;
}

}

调用多个注册中心的服务

application.yml

dubbo:
registry:
protocol: zookeeper
address: 127.0.0.1:2181
id: my-registry
protocol:
port: 20882
name: dubbo
id: dubbo
application:
name: demo-consumer
id: demo-consumer
qosEnable: true
qosPort: 22224
registry:
other:
protocol: zookeeper
address: 127.0.0.1:2181
id: other
@Configuration
public class DubboConfig {

/**
* 配置文件里配置默认的,这里配置其他需要的
*/
@Bean("otherRegistry")
@ConfigurationProperties(prefix = "registry.other")
public RegistryConfig otherRegistry() {
return new RegistryConfig();
}
}
/**
* Created by javahongxi on 2017/12/4.
* 将服务调用包装,可以方便进行调用监控
*/
@Component
public class DemoRpc {

@Reference(version = "1.0.0")
private DemoService demoService;

@Reference(version = "1.0.0", registry = "otherRegistry")
private OtherService otherService;

public String sayHello(String name) {
String result = null;
try {
result = demoService.sayHello(name);
} catch (Exception e) {
// log
e.printStackTrace();
}
return result;
}

public String sayHello2(String name) {
String result = null;
try {
result = otherService.sayHello(name);
} catch (Exception e) {
// log
e.printStackTrace();
}
return result;
}
}

发布服务到多个注册中心

@Service(
version = "1.0.0",
registry = {"my-registry", "otherRegistry"}
)
public class OtherServiceImpl implements OtherService {

@Autowired
private UserService userService;

public String sayHello(String name) {
boolean registerSuccess = userService.register(name);
System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
return "Hello " + name + ", registerSuccess:" + registerSuccess + ", response form provider: " + RpcContext.getContext().getLocalAddress();
}

}

PS: Dubbo优雅停机应该 kill -> sleep -> kill -9,切勿直接kill -9