今天整理springboot+dubbo+zookeeper在网上找了很多资料,记录一下自己搭建时候的心得
1.zookeeper提取文件提取码qazw
2.dubbo提取文件提取码qwer
springboot整合dubbo+zookeeper 也就是子项目为springboot 父级还是maven
首先创建一个父级maven
这个就是父类的结构
父级pom 文件引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<!-- zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.8</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
</dependencies>
这样父类就好了接下来创建子类,就是在父类里创建module
首先创建一个公共的api接口工程:common-api 这个还是maven项目
common-api结构
创建一个service接口在这之前 先加载一下pom文件
创建一个接口作为demo
这样公共接口就好了
接下来创建一个生产者,生产者就是springboot项目了
生产者结构
在pom文件中引入我们的公共接口和dubbo依赖,我搭建的时候有一个问题,就是springboot自带的logging一直显示冲突不能启动,然后我就讲logging去掉转而使用了log4j2作为日志
<dependencies>
<dependency>
<groupId>com.demo</groupId>
<artifactId>common-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--log4j2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
这是我的log4j2配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration monitorInterval="5">
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--变量配置-->
<Properties>
<!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<!-- %logger{36} 表示 Logger 名字最长36个字符 -->
<property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<!-- 定义日志存储的路径 -->
<property name="FILE_PATH" value="./logs" />
<!--这里value换成自己的项目名-->
<property name="FILE_NAME" value="server-provider" />
</Properties>
<appenders>
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="${LOG_PATTERN}"/>
<!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</console>
<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
<!--<File name="Filelog" fileName="D:\test\logs\test.log" append="false">
<PatternLayout pattern="${LOG_PATTERN}"/>
</File>-->
<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<!--<RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
<!–控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)–>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<!–interval属性用来指定多久滚动一次,默认是1 hour–>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<!– DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖–>
<DefaultRolloverStrategy max="15"/>
</RollingFile>-->
<!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<!--<RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
<!–控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)–>
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<!–interval属性用来指定多久滚动一次,默认是1 hour–>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<!– DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖–>
<DefaultRolloverStrategy max="15"/>
</RollingFile>-->
<!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<!--interval属性用来指定多久滚动一次,默认是1 天-->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!--<SizeBasedTriggeringPolicy size="10MB"/>-->
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
<DefaultRolloverStrategy max="365"/>
</RollingFile>
</appenders>
<!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。-->
<!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.mybatis" level="info" additivity="false">
<AppenderRef ref="Console"/>
</logger>
<!--监控系统信息-->
<!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。-->
<Logger name="org.springframework" level="All" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<root level="info">
<appender-ref ref="Console"/>
<!--<appender-ref ref="Filelog"/>-->
<!--<appender-ref ref="RollingFileInfo"/>-->
<!--<appender-ref ref="RollingFileWarn"/>-->
<appender-ref ref="RollingFileError"/>
</root>
</loggers>
</configuration>
application.properties配置文件
#当前服务/应用的名字
dubbo.application.name=user-service-provider
#注册中心的协议和地址
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181
#通信规则(通信协议和接口)
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
#连接监控中心
dubbo.monitor.protocol=registry
#开启包扫描,可替代 @EnableDubbo 注解
##dubbo.scan.base-packages=com.demo.dubbo-parent
#log4j2配置文件路径
logging.config=classpath:log4j2-spring.xml
server.port=8082
我们需要将启动类更改一下 需要几个一个dubbo注解@EnableDubbo这个是用于扫描service
@EnableDubbo
@SpringBootApplication
public class ServerProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ServerProviderApplication.class, args);
}
}
接下来我们就可以写我们的实体类了
service实体类里@Service注解一定要用dubbo的注解如果使用spring提供的注解那么dubbo将不能获取
@Service
public class DemoServiceImpl implements DemoService{
@Override
public String demo(String a) {
return "成功"+a;
}
}
这样生产者就可以启动了,我们打开dubbo网站看一下
这样就有了一个生产者
接下里创建一个消费者,也是一个springboot项目
消费者结构如下:
首先先导入pom依赖:其中包括我们的公共接口依赖,还是将logging换成了log4j2 配置文件一样
<dependencies>
<dependency>
<groupId>com.demo</groupId>
<artifactId>common-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--log4j2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
application.properties配置文件
#避免和监控中心端口冲突,设为8081端口访问
server.port=8081
dubbo.application.name=order-service-consumer
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181
dubbo.monitor.protocol=registry
同样 消费者也需要更改启动文件加上@EnableDubbo注解
@EnableDubbo
@SpringBootApplication
public class ServerConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerConsumerApplication.class, args);
}
}
接下来就是创建一个controller类
@Controller
public class DemoController {
/*@Reference 必须是dubbo的注解*/
@Reference
private DemoService demoService;
@RequestMapping(value = "demo",method = RequestMethod.GET)
@ResponseBody
public String demo(String a){
return demoService.demo(a);
}
}
这样生产者也就完成了 接下来就可以运行了
这样就产生了消费者
页面上访问一下,这样就成功搭建一个springboot+dubbo+zookeeper的微服务