總體pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.songlk</groupId>
<artifactId>dubbo</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>consumer</module>
<module>provider</module>
<module>api</module>
</modules>
<name>dubbo</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<dubbo.version>2.7.3</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
dubbo
.idea
api
consumer
provider
src
dubbo.iml
pom.xml
-------
pojo module 公用
package com.songlk.pojo;
import lombok.Data;
import java.io.Serializable;
@Data
public class User implements Serializable{
private String name;
private String age;
}
package com.songlk.service;
import com.songlk.pojo.User;
public interface UserService {
User selectById(String id);
}
----------------------------
provider
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dubbo</artifactId>
<groupId>com.songlk</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>provider</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.20.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
<!--dubbo zookeeper-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.songlk</groupId>
<artifactId>api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
package com.songlk.service;
import com.songlk.pojo.User;
public interface UserService {
public User selectById(String id);
}
package com.songlk.service.impl;
import com.songlk.pojo.User;
import com.songlk.service.UserService;
public class UserServiceImp implements UserService {
@Override
public User selectById(String id) {
System.out.println("-----provieder UserServiceImp selectById");
User user=new User();
user.setAge("provieder555");
user.setName("provieder555");
return user;
}
}
----
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"/>-->
<dubbo:registry address="zookeeper://192.168.198.200:2181?backup=192.168.198.201:2181,192.168.198.202:2181" />
<!-- use dubbo protocol to export service on port 20880 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- declare the service interface to be exported -->
<dubbo:service inter ref="UserServiceImp"/>
<!-- service implementation, as same as regular local bean -->
<bean id="UserServiceImp" class="com.songlk.service.impl.UserServiceImp"/>
</beans>
-----
consumer
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dubbo</artifactId>
<groupId>com.songlk</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>consumer</artifactId>
<name>consumer</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.songlk</groupId>
<artifactId>api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.0.M3</version>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd
">
<!--http://www.springframework.org/schema/context-->
<!--http://www.springframework.org/schema/context/spring-context.xsd-->
<context:component-scan base-package="com.songlk.service">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 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">
<dubbo:parameter key="qos.enable" value="true" />
<dubbo:parameter key="qos.accept.foreign.ip" value="false" />
<dubbo:parameter key="qos.port" value="33333" />
</dubbo:application>
<!-- use multicast registry center to discover service -->
<!--<dubbo:registry address="multicast://224.5.6.7:1234"/>-->
<dubbo:registry address="zookeeper://192.168.198.200:2181?backup=192.168.198.201:2181,192.168.198.202:2181" />
<!-- generate proxy for the remote service, then demoService can be used in the same way as the
local regular interface -->
<dubbo:reference id="userService"
inter/>
</beans>
----
package com.songlk.bean;
import com.songlk.pojo.User;
import lombok.Data;
import java.io.Serializable;
@Data
public class MeetingPub implements Serializable{
private int id;
private String content ;
private User user;
}
package com.songlk.service;
import com.songlk.bean.MeetingPub;
public interface MeetingService {
MeetingPub selectMeetingPub(int id);
}
package com.songlk.service.impl;
import com.songlk.bean.MeetingPub;
import com.songlk.pojo.User;
import com.songlk.service.MeetingService;
import com.songlk.service.UserService;
//import org.apache.dubbo.config.annotation.Reference;
//import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MeetingServiceImp implements MeetingService {
@Autowired
UserService userService;
@Override
public MeetingPub selectMeetingPub(int id) {
MeetingPub meetingPub=new MeetingPub();
meetingPub.setId(100);
meetingPub.setContent("content");
// userService
User user=userService.selectById("1");
meetingPub.setUser(user);
return meetingPub;
}
}
package com.songlk;
import com.songlk.bean.MeetingPub;
import com.songlk.service.MeetingService;
//import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args ) throws IOException
{
ClassPathXmlApplicationContext classPathXmlApplicationContext=new
ClassPathXmlApplicationContext(
new String[]{"classpath:consumer.xml"});
classPathXmlApplicationContext.start();
System.out.println( "Hello consumer ok!" );
MeetingService meetingService
=classPathXmlApplicationContext
.getBean(MeetingService.class);
MeetingPub meetingPub=meetingService.selectMeetingPub(0);
System.out.println(meetingPub);
System.in.read();
}
}
[22/11/19 04:59:02:002 CST] main INFO server.Server: [DUBBO] qos-server bind localhost:33333, dubbo version: 2.7.3, current host: 10.130.24.30
[22/11/19 04:59:02:002 CST] main INFO zookeeper.ZookeeperRegistry: [DUBBO] Load registry cache file C:\Users\Administrator\.dubbo\dubbo-registry-demo-consumer-192.168.198.200:2181.cache, data: {com.songlk.service.UserService=empty://10.130.24.30/com.songlk.service.UserService?application=demo-consumer&category=routers&dubbo=2.0.2&interface=com.songlk.service.UserService&lazy=false&methods=selectById&pid=5308&qos.accept.foreign.ip=false&qos.enable=true&qos.port=33333&release=2.7.3&side=consumer&sticky=false×tamp=1574413108499 empty://10.130.24.30/com.songlk.service.UserService?application=demo-consumer&category=configurators&dubbo=2.0.2&interface=com.songlk.service.UserService&lazy=false&methods=selectById&pid=5308&qos.accept.foreign.ip=false&qos.enable=true&qos.port=33333&release=2.7.3&side=consumer&sticky=false×tamp=1574413108499 dubbo://10.130.24.30:20880/com.songlk.service.UserService?anyhost=true&application=demo-provider&bean.name=com.songlk.service.UserService&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.songlk.service.UserService&methods=selectById&pid=5372®ister=true&release=2.7.3&side=provider×tamp=1574412761709}, dubbo version: 2.7.3, current host: 10.130.24.30
[22/11/19 04:59:02:002 CST] main INFO zookeeper.ZookeeperTransporter: [DUBBO] find valid zookeeper client from the cache for address: zookeeper://192.168.198.200:2181/org.apache.dubbo.registry.RegistryService?application=demo-consumer&backup=192.168.198.201:2181,192.168.198.202:2181&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&pid=5512&qos.accept.foreign.ip=false&qos.enable=true&qos.port=33333&release=2.7.3×tamp=1574413141700, dubbo version: 2.7.3, current host: 10.130.24.30
[22/11/19 04:59:02:002 CST] main INFO zookeeper.ZookeeperRegistry: [DUBBO] Register: consumer://10.130.24.30/com.songlk.service.UserService?application=demo-consumer&category=consumers&check=false&dubbo=2.0.2&interface=com.songlk.service.UserService&lazy=false&methods=selectById&pid=5512&qos.accept.foreign.ip=false&qos.enable=true&qos.port=33333&release=2.7.3&side=consumer&sticky=false×tamp=1574413141376, dubbo version: 2.7.3, current host: 10.130.24.30
[22/11/19 04:59:02:002 CST] main INFO zookeeper.ZookeeperRegistry: [DUBBO] Subscribe: consumer://10.130.24.30/com.songlk.service.UserService?application=demo-consumer&category=providers,configurators,routers&dubbo=2.0.2&interface=com.songlk.service.UserService&lazy=false&methods=selectById&pid=5512&qos.accept.foreign.ip=false&qos.enable=true&qos.port=33333&release=2.7.3&side=consumer&sticky=false×tamp=1574413141376, dubbo version: 2.7.3, current host: 10.130.24.30
[22/11/19 04:59:02:002 CST] main INFO zookeeper.ZookeeperRegistry: [DUBBO] Notify urls for subscribe url consumer://10.130.24.30/com.songlk.service.UserService?application=demo-consumer&category=providers,configurators,routers&dubbo=2.0.2&interface=com.songlk.service.UserService&lazy=false&methods=selectById&pid=5512&qos.accept.foreign.ip=false&qos.enable=true&qos.port=33333&release=2.7.3&side=consumer&sticky=false×tamp=1574413141376, urls: [dubbo://10.130.24.30:20880/com.songlk.service.UserService?anyhost=true&application=demo-provider&bean.name=com.songlk.service.UserService&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.songlk.service.UserService&methods=selectById&pid=5332®ister=true&release=2.7.3&side=provider×tamp=1574413127649, empty://10.130.24.30/com.songlk.service.UserService?application=demo-consumer&category=configurators&dubbo=2.0.2&interface=com.songlk.service.UserService&lazy=false&methods=selectById&pid=5512&qos.accept.foreign.ip=false&qos.enable=true&qos.port=33333&release=2.7.3&side=consumer&sticky=false×tamp=1574413141376, empty://10.130.24.30/com.songlk.service.UserService?application=demo-consumer&category=routers&dubbo=2.0.2&interface=com.songlk.service.UserService&lazy=false&methods=selectById&pid=5512&qos.accept.foreign.ip=false&qos.enable=true&qos.port=33333&release=2.7.3&side=consumer&sticky=false×tamp=1574413141376], dubbo version: 2.7.3, current host: 10.130.24.30
[22/11/19 04:59:02:002 CST] main INFO transport.AbstractClient: [DUBBO] Succeed connect to server /10.130.24.30:20880 from NettyClient 10.130.24.30 using dubbo version 2.7.3, channel is NettyChannel [channel=[id: 0x8b215c88, L:/10.130.24.30:63693 - R:/10.130.24.30:20880]], dubbo version: 2.7.3, current host: 10.130.24.30
[22/11/19 04:59:02:002 CST] main INFO transport.AbstractClient: [DUBBO] Start NettyClient WIN-V2QAFF7ED21/10.130.24.30 connect to the server /10.130.24.30:20880, dubbo version: 2.7.3, current host: 10.130.24.30
[22/11/19 04:59:02:002 CST] main INFO config.AbstractConfig: [DUBBO] Refer dubbo service com.songlk.service.UserService from url zookeeper://192.168.198.200:2181/org.apache.dubbo.registry.RegistryService?anyhost=true&application=demo-consumer&bean.name=com.songlk.service.UserService&check=false&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.songlk.service.UserService&lazy=false&methods=selectById&pid=5512&qos.accept.foreign.ip=false&qos.enable=true&qos.port=33333®ister=true®ister.ip=10.130.24.30&release=2.7.3&remote.application=demo-provider&side=consumer&sticky=false×tamp=1574413141376, dubbo version: 2.7.3, current host: 10.130.24.30
Hello consumer ok!
MeetingPub(id=100, content=content, user=User(name=provieder555, age=provieder555))