需要创建 发布者、订阅者
一:创建统一项目,主要是定义接口及实体,方便发布和订阅两个项目调用
dubbo-demo-service
定义实体类
package com.hhm.gmall.bean;
import java.io.Serializable;
/**
* @Author: kevis
* @DateTime: 2021/12/29 17:28
* @Description: UserAddress
*/
public class UserAddress implements Serializable {
private Integer id;
/**
* 用户地址
*/
private String userAddress;
/**
* 用户id
*/
private String userId;
/**
* 收货人
*/
private String consignee;
/**
* 电话号码
*/
private String phoneNum;
/**
* 是否为默认地址 Y-是 N-否
*/
private String isDefault;
public UserAddress() {
super();
}
public UserAddress(Integer id, String userAddress, String userId, String consignee, String phoneNum, String isDefault) {
this.id = id;
this.userAddress = userAddress;
this.userId = userId;
this.consignee = consignee;
this.phoneNum = phoneNum;
this.isDefault = isDefault;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getConsignee() {
return consignee;
}
public void setConsignee(String consignee) {
this.consignee = consignee;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getIsDefault() {
return isDefault;
}
public void setIsDefault(String isDefault) {
this.isDefault = isDefault;
}
@Override
public String toString() {
return "UserAddress{" +
"id=" + id +
", userAddress='" + userAddress + '\'' +
", userId='" + userId + '\'' +
", consignee='" + consignee + '\'' +
", phoneNum='" + phoneNum + '\'' +
", isDefault='" + isDefault + '\'' +
'}';
}
}
定义发布者的接口
package com.hhm.gmall.service;
import com.hhm.gmall.bean.UserAddress;
import java.util.List;
/**
* @Author: kevis
* @DateTime: 2021/12/29 17:27
* @Description: 用户服务
*/
public interface UserService {
/**
* 按照用户id返回所有的收货地址
* @param userId
* @return
*/
List<UserAddress> getUserAddressList(String userId);
}
定义订阅者的调用接口
package com.hhm.gmall.service;
/**
* @Author: kevis
* @DateTime: 2021/12/29 17:38
* @Description: OrderService
*/
public interface OrderService {
void initOrder(String userId);
}
二:dubbo-demo-service-provider 发布者的项目,提供服务
1. jar的引用 pom.xml
<?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>Spring</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo-demo-service-provider</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>dubbo-demo-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.11</version>
</dependency>
<!--zookeeper的客户端-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<!--需要用到这个 netty-->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.56.Final</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.32</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.32</version>
</dependency>
</dependencies>
</project>
需要引用 netty-all 不然会报错
java.lang.NoClassDefFoundError: io/netty/channel/EventLoopGroup
需要引用slfj 不然会报错
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
之前一直报错(破解版的问题): 点击文件->作废缓存重启
参考:【异常】java: 程序包org.springframework.context.annotation不存在。_ID:CheneyWang的博客-CSDN博客
java: 程序包org.springframework.context.annotation不存在
1.创建实现
package com.hhm.gmall.service.impl;
import com.hhm.gmall.bean.UserAddress;
import com.hhm.gmall.service.UserService;
import java.util.Arrays;
import java.util.List;
/**
* @Author: kevis
* @DateTime: 2021/12/29 17:28
* @Description: UserServiceImpl
*/
public class UserServiceImpl implements UserService {
/**
* 按照用户id返回所有的收货地址
*
* @param userId
* @return
*/
@Override
public List<UserAddress> getUserAddressList(String userId) {
UserAddress userAddress1 = new UserAddress(1, "厦门市思明区软件园二期科技大楼3层", "1", "李老师", "13754698745", "Y");
UserAddress userAddress2 = new UserAddress(2, "广州市思明区软件园二期科技大楼3层", "1", "姜老师", "13754567425", "N");
return Arrays.asList(userAddress1,userAddress2);
}
}
2. 创建 dubbo的配置 provider.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://dubbo.apache.org/schema/dubbo"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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">
<!--1、指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)-->
<dubbo:application name="user-service-provider"></dubbo:application>
<!--2、指定注册中心的位置-->
<!-- <dubbo:registry address="zookeeper://127.0.0.1:2181"/>-->
<dubbo:registry protocol="zookeeper" address="127.0.0.1" port="2181"/>
<!--3、指定通信规则(通信协议?通信端口)-->
<dubbo:protocol name="dubbo" port="20881"/>
<!--4、暴露服务 ref:指向的服务的真正的实现对象-->
<dubbo:service interface="com.hhm.gmall.service.UserService" ref="userServiceImpl"/>
<!--服务的实现-->
<bean id="userServiceImpl" class="com.hhm.gmall.service.impl.UserServiceImpl" ></bean>
</beans>
后续启动报错:
[main] ERROR [com.alibaba.dubbo.qos.server.Server] - [DUBBO] qos-server can not bind localhost:22222, dubbo version: 2.6.11, current host: 192.168.1.24
java.net.BindException: Address already in use: bind
是因为这里的端口冲突了,换一个就好
<dubbo:protocol name="dubbo" port="20881"/>
3. 创建main进行测试
package com.hhm.gmall;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
/**
* @Author: kevis
* @DateTime: 2021/12/29 18:06
* @Description: MainApplication
*/
public class MainApplication {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("provider.xml");
ioc.start();
System.in.read();
}
}
附上 log4j.properties
log4j.rootLogger=ERROR, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
###显示SQL语句部分
#log4j.logger.com.ibatis=DEBUG
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
#log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
#log4j.logger.Java.sql.Connection=DEBUG
三:订阅的项目
项目名: dubbo-demo-service-consumer
1. pom.xml
<?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>Spring</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo-demo-service-consumer</artifactId>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>dubbo-demo-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.11</version>
</dependency>
<!--zookeeper的客户端-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.56.Final</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.32</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.32</version>
</dependency>
</dependencies>
</project>