package com.xiuye.service;
public interface DemoService {
String hello(String str);
}
package com.xiuye.provider;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.xiuye.service.DemoService;
import com.alibaba.dubbo.rpc.RpcContext;
public class DemoServiceImpl implements DemoService{
@Override
public String hello(String name) {
System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
return "Hello " + name + ", response form provider: " + RpcContext.getContext().getLocalAddress();
}
}
package com.xiuye.provider;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Provider {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"});
context.start();
System.in.read();
}
}
package com.xiuye.consumer;
import com.xiuye.service.DemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Consumer {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"});
context.start();
DemoService demoService = (DemoService) context.getBean("demoService"); // get remote service proxy
System.out.println(demoService);
String hello = demoService.hello("world"); // call remote method
System.out.println(hello); // get result
}
}
dubbo-demo-provider.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/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-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- provider's application name, used for tracing dependency relationship -->
<dubbo:application name="provider"/>
<!-- use multicast registry center to export service -->
<dubbo:registry address="multicast://224.0.0.2: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="com.xiuye.provider.DemoServiceImpl"/>
<!-- declare the service interface to be exported -->
<dubbo:service interface="com.xiuye.service.DemoService" ref="demoService"/>
</beans>
dubbo.properties
dubbo.application.qos.port=22222
pom.xml
dubbo-demo-consumer.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/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-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/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="consumer"/>
<!-- use multicast registry center to discover service -->
<dubbo:registry address="multicast://224.0.0.2: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="true" interface="com.xiuye.service.DemoService"/>
<!-- <dubbo:protocol host="127.0.0.1"/> -->
</beans>
dubbo.properties
dubbo.application.qos.port=33333
pom.xml
log4j.properties
###set log levels###
log4j.rootLogger=info, stdout
###output to 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
Output:
provider:
[08/03/18 11:07:28:028 CST] main INFO support.ClassPathXmlApplicationContext: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@175e721: startup date [Thu Mar 08 23:07:28 CST 2018]; root of context hierarchy
[08/03/18 11:07:29:029 CST] main INFO xml.XmlBeanDefinitionReader: Loading XML bean definitions from class path resource [META-INF/spring/dubbo-demo-provider.xml]
[08/03/18 11:07:29:029 CST] main INFO logger.LoggerFactory: using logger: com.alibaba.dubbo.common.logger.log4j.Log4jLoggerAdapter
[08/03/18 11:07:29:029 CST] main INFO config.AbstractConfig: [DUBBO] The service ready on spring started. service: com.xiuye.service.DemoService, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:29:029 CST] main INFO config.AbstractConfig: [DUBBO] Export dubbo service com.xiuye.service.DemoService to local registry, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:29:029 CST] main INFO config.AbstractConfig: [DUBBO] Export dubbo service com.xiuye.service.DemoService to url dubbo://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&bind.ip=192.168.56.1&bind.port=20880&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&qos.port=22222&side=provider×tamp=1520521649671, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:29:029 CST] main INFO config.AbstractConfig: [DUBBO] Register dubbo service com.xiuye.service.DemoService url dubbo://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&bind.ip=192.168.56.1&bind.port=20880&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&qos.port=22222&side=provider×tamp=1520521649671 to registry registry://224.0.0.2:1234/com.alibaba.dubbo.registry.RegistryService?application=provider&dubbo=2.6.1&pid=3724&qos.port=22222®istry=multicast×tamp=1520521649658, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:30:030 CST] main INFO transport.AbstractServer: [DUBBO] Start NettyServer bind /0.0.0.0:20880, export /192.168.56.1:20880, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:30:030 CST] main INFO multicast.MulticastRegistry: [DUBBO] Register: dubbo://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&side=provider×tamp=1520521649671, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:30:030 CST] main INFO multicast.MulticastRegistry: [DUBBO] Send broadcast message: register dubbo://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&side=provider×tamp=1520521649671 to /224.0.0.2:1234, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:30:030 CST] DubboMulticastRegistryReceiver INFO multicast.MulticastRegistry: [DUBBO] Receive multicast message: register dubbo://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&side=provider×tamp=1520521649671 from /192.168.56.1:1234, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:30:030 CST] main INFO multicast.MulticastRegistry: [DUBBO] Subscribe: provider://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&category=configurators&check=false&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&side=provider×tamp=1520521649671, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:30:030 CST] main INFO multicast.MulticastRegistry: [DUBBO] Send broadcast message: subscribe provider://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&category=configurators&check=false&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&side=provider×tamp=1520521649671 to /224.0.0.2:1234, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:30:030 CST] DubboMulticastRegistryReceiver INFO multicast.MulticastRegistry: [DUBBO] Receive multicast message: subscribe provider://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&category=configurators&check=false&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&side=provider×tamp=1520521649671 from /192.168.56.1:1234, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:31:031 CST] main WARN multicast.MulticastRegistry: [DUBBO] Ignore empty notify urls for subscribe url provider://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&category=configurators&check=false&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&side=provider×tamp=1520521649671, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:40:040 CST] DubboMulticastRegistryReceiver INFO multicast.MulticastRegistry: [DUBBO] Receive multicast message: register consumer://192.168.56.1/com.xiuye.service.DemoService?application=consumer&category=consumers&check=false&dubbo=2.6.1&interface=com.xiuye.service.DemoService&methods=hello&pid=3112&qos.port=33333&side=consumer×tamp=1520521660372 from /192.168.56.1:1234, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:40:040 CST] DubboMulticastRegistryReceiver INFO multicast.MulticastRegistry: [DUBBO] Receive multicast message: subscribe consumer://192.168.56.1/com.xiuye.service.DemoService?application=consumer&category=providers,configurators,routers&check=true&dubbo=2.6.1&interface=com.xiuye.service.DemoService&methods=hello&pid=3112&qos.port=33333&side=consumer×tamp=1520521660372 from /192.168.56.1:1234, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:40:040 CST] DubboMulticastRegistryReceiver INFO multicast.MulticastRegistry: [DUBBO] Send broadcast message: register dubbo://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&side=provider×tamp=1520521649671 to /224.0.0.2:1234, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:40:040 CST] DubboMulticastRegistryReceiver INFO multicast.MulticastRegistry: [DUBBO] Receive multicast message: register dubbo://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&side=provider×tamp=1520521649671 from /192.168.56.1:1234, dubbo version: 2.6.1, current host: 192.168.56.1
[23:07:41] Hello world, request from consumer: /192.168.56.1:53683
consumer
[08/03/18 11:07:39:039 CST] main INFO support.ClassPathXmlApplicationContext: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@175e721: startup date [Thu Mar 08 23:07:39 CST 2018]; root of context hierarchy
[08/03/18 11:07:39:039 CST] main INFO xml.XmlBeanDefinitionReader: Loading XML bean definitions from class path resource [META-INF/spring/dubbo-demo-consumer.xml]
[08/03/18 11:07:39:039 CST] main INFO logger.LoggerFactory: using logger: com.alibaba.dubbo.common.logger.log4j.Log4jLoggerAdapter
[08/03/18 11:07:40:040 CST] main INFO multicast.MulticastRegistry: [DUBBO] Load registry store file C:\Users\Administrator\.dubbo\dubbo-registry-consumer-224.0.0.2:1234.cache, data: {com.xiuye.service.DemoService=dubbo://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=5028&side=provider×tamp=1520520543228}, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:40:040 CST] main INFO multicast.MulticastRegistry: [DUBBO] Register: consumer://192.168.56.1/com.xiuye.service.DemoService?application=consumer&category=consumers&check=false&dubbo=2.6.1&interface=com.xiuye.service.DemoService&methods=hello&pid=3112&qos.port=33333&side=consumer×tamp=1520521660372, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:40:040 CST] main INFO multicast.MulticastRegistry: [DUBBO] Send broadcast message: register consumer://192.168.56.1/com.xiuye.service.DemoService?application=consumer&category=consumers&check=false&dubbo=2.6.1&interface=com.xiuye.service.DemoService&methods=hello&pid=3112&qos.port=33333&side=consumer×tamp=1520521660372 to /224.0.0.2:1234, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:40:040 CST] DubboMulticastRegistryReceiver INFO multicast.MulticastRegistry: [DUBBO] Receive multicast message: register consumer://192.168.56.1/com.xiuye.service.DemoService?application=consumer&category=consumers&check=false&dubbo=2.6.1&interface=com.xiuye.service.DemoService&methods=hello&pid=3112&qos.port=33333&side=consumer×tamp=1520521660372 from /192.168.56.1:1234, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:40:040 CST] main INFO multicast.MulticastRegistry: [DUBBO] Subscribe: consumer://192.168.56.1/com.xiuye.service.DemoService?application=consumer&category=providers,configurators,routers&check=true&dubbo=2.6.1&interface=com.xiuye.service.DemoService&methods=hello&pid=3112&qos.port=33333&side=consumer×tamp=1520521660372, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:40:040 CST] main INFO multicast.MulticastRegistry: [DUBBO] Send broadcast message: subscribe consumer://192.168.56.1/com.xiuye.service.DemoService?application=consumer&category=providers,configurators,routers&check=true&dubbo=2.6.1&interface=com.xiuye.service.DemoService&methods=hello&pid=3112&qos.port=33333&side=consumer×tamp=1520521660372 to /224.0.0.2:1234, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:40:040 CST] DubboMulticastRegistryReceiver INFO multicast.MulticastRegistry: [DUBBO] Receive multicast message: subscribe consumer://192.168.56.1/com.xiuye.service.DemoService?application=consumer&category=providers,configurators,routers&check=true&dubbo=2.6.1&interface=com.xiuye.service.DemoService&methods=hello&pid=3112&qos.port=33333&side=consumer×tamp=1520521660372 from /192.168.56.1:1234, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:40:040 CST] DubboMulticastRegistryReceiver INFO multicast.MulticastRegistry: [DUBBO] Receive multicast message: register dubbo://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&side=provider×tamp=1520521649671 from /192.168.56.1:1234, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:40:040 CST] DubboMulticastRegistryReceiver INFO multicast.MulticastRegistry: [DUBBO] Notify urls for subscribe url consumer://192.168.56.1/com.xiuye.service.DemoService?application=consumer&category=providers,configurators,routers&check=true&dubbo=2.6.1&interface=com.xiuye.service.DemoService&methods=hello&pid=3112&qos.port=33333&side=consumer×tamp=1520521660372, urls: [dubbo://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&side=provider×tamp=1520521649671], dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:41:041 CST] DubboMulticastRegistryReceiver INFO transport.AbstractClient: [DUBBO] Successed connect to server /192.168.56.1:20880 from NettyClient 192.168.56.1 using dubbo version 2.6.1, channel is NettyChannel [channel=[id: 0xd843504d, /192.168.56.1:53683 => /192.168.56.1:20880]], dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:41:041 CST] DubboMulticastRegistryReceiver INFO transport.AbstractClient: [DUBBO] Start NettyClient xiuye/192.168.56.1 connect to the server /192.168.56.1:20880, dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:41:041 CST] main INFO multicast.MulticastRegistry: [DUBBO] Notify urls for subscribe url consumer://192.168.56.1/com.xiuye.service.DemoService?application=consumer&category=providers,configurators,routers&check=true&dubbo=2.6.1&interface=com.xiuye.service.DemoService&methods=hello&pid=3112&qos.port=33333&side=consumer×tamp=1520521660372, urls: [dubbo://192.168.56.1:20880/com.xiuye.service.DemoService?anyhost=true&application=provider&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3724&side=provider×tamp=1520521649671], dubbo version: 2.6.1, current host: 192.168.56.1
[08/03/18 11:07:41:041 CST] main INFO config.AbstractConfig: [DUBBO] Refer dubbo service com.xiuye.service.DemoService from url multicast://224.0.0.2:1234/com.alibaba.dubbo.registry.RegistryService?anyhost=true&application=consumer&check=true&dubbo=2.6.1&generic=false&interface=com.xiuye.service.DemoService&methods=hello&pid=3112&qos.port=33333®ister.ip=192.168.56.1&remote.timestamp=1520521649671&side=consumer×tamp=1520521660372, dubbo version: 2.6.1, current host: 192.168.56.1
com.alibaba.dubbo.common.bytecode.proxy0@a638b5
Hello world, response form provider: 192.168.56.1:20880
如果maven工程找不到相应的jar包,去Dubbo官网下载源代码---编译.(mvn compile --> mvn package --> mvn install.)
如果eclipse中maven找不到本地刚刚编译jar,"Window" ==> "Show Views" ==> "Other" ==> "Maven Repositories" ==>
"Local Repositories" ==> "Mouse Right Clicked" ==> "Rebuild Index".
参考链接: