spirng boot+dubbo+zookeeper整合出现的问题

来源:互联网 发布:删除数据库的sql语句 编辑:程序博客网 时间:2024/06/08 02:40
最近没有事情做,于是研究了一下spring boot+dubbo,由于好多的博客都是直接上代码,然后引入好多的jar包,搞得我这个新手一脸懵逼。还是看了[dubbo](dubbo.io),最后呢,整合除了一个非常简陋的框架。

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

**三个项目 :
spring-boot-api(消费者和提供者的服务支持)
spirng-boot-consumer(消费者)
spring-boot-provider (提供者)**

最外层的pom.xml 中引入dubbo的jar包

<dependencies>        <!-- https://mvnrepository.com/artifact/com.gitee.reger/spring-boot-starter-dubbo -->        <dependency>            <groupId>com.gitee.reger</groupId>            <artifactId>spring-boot-starter-dubbo</artifactId>            <version>1.0.1</version>        </dependency>        <!--spring-boot-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>            <version>1.5.6.RELEASE</version>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>dubbo</artifactId>            <version>2.5.7</version>            <exclusions>                <exclusion>                    <artifactId>spring</artifactId>                    <groupId>org.springframework</groupId>                </exclusion>            </exclusions>        </dependency>        <dependency>            <groupId>org.apache.zookeeper</groupId>            <artifactId>zookeeper</artifactId>            <version>3.4.6</version>            <exclusions>                <exclusion>                    <artifactId>slf4j-log4j12</artifactId>                    <groupId>org.slf4j</groupId>                </exclusion>            </exclusions>        </dependency>        <dependency>            <groupId>com.github.sgroschupf</groupId>            <artifactId>zkclient</artifactId>            <version>0.1</version>        </dependency>    </dependencies>

spring-boot-api
这里放入了接口类,service 。

package com.lixk.user.service;public interface UserService {        String sayHello();}

spring-boot-provider (提供者)
这里主要是提供口,放入serviceImpl,然后搭建spring boot的启动类
SpringBootApplication,代码如下:

serviceImpl:

package com.lixk.user.serviceImpl;import com.lixk.user.service.UserService;public class serviceImpl implements UserService {    public String sayHello() {        return "Hello DUBBO!!";    }}

启动类:

@SpringBootApplication@ImportResource(value = {"classpath:providers.xml"})@Controllerpublic class DubboProviderApplication {    @RequestMapping("/home")    @ResponseBody    String home() {        return "Hello world";    }    public static void main(String[] args) {        SpringApplication.run(DubboProviderApplication.class, args);    }}

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-boot-dubbo</artifactId>        <groupId>com.yunduan</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <groupId>com.yunduan</groupId>    <artifactId>spring-boot-provider</artifactId>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>        <java.version>1.8</java.version>    </properties>    <dependencies>        <dependency>            <groupId>com.yunduan</groupId>            <artifactId>spring-boot-api</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>    </dependencies></project>

接着就是在zookeeper上面暴露服务,代码如下:

<?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://code.alibabatech.com/schema/dubbo"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">    <dubbo:application name="dubbo-provider"/>    <dubbo:registry address="zookeeper://127.0.0.1:2181" check="false" subscribe="false"/>    <dubbo:service interface="com.lixk.user.service.UserService" ref="userService"/>    <!-- 用dubbo协议在100端口暴露服务 -->    <dubbo:protocol name="dubbo" port="100" />    <bean id="userService" class="com.lixk.user.serviceImpl.serviceImpl"></bean></beans>

启动提供者的启动类(DubboProviderApplication),你会发现在dubbo的监控项目(dubbo-admin)里面会有这个你的提供者接口
这里写图片描述
这边我开启的端口是100。

接着我们开始消费者的调用。

spirng-boot-consumer(消费者)
在这里,我放入了controller,直接调用我们的这个提供者的服务。

package com.lixk.user.controller;import com.lixk.user.service.UserService;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;@RestControllerpublic class UserController{    @Resource    UserService userService;    @RequestMapping(value = "/findUser")    private String findUser(){        return userService.sayHello();    }}

然后编写启动类

package com;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.ImportResource;@SpringBootApplication@ImportResource(value = {"classpath:consumer.xml"})public class DoubboConsumerApplication {    public static void main(String[] args) {        SpringApplication.run(DoubboConsumerApplication.class, args);    }}

配置文件 consumer.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://code.alibabatech.com/schema/dubbo"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd       http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">    <!--<dubbo:application name="demotest-consumer"/>-->    <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>    <!--使用 dubbo 协议调用定义好的 com.lixk.user.service.UserService 接口-->    <dubbo:reference id="sayHello" interface="com.lixk.user.service.UserService"/></beans>

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-boot-dubbo</artifactId>        <groupId>com.yunduan</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <groupId>com.yunduan</groupId>    <artifactId>spring-boot-consumer</artifactId>    <dependencies>        <dependency>            <groupId>com.yunduan</groupId>            <artifactId>spring-boot-api</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>com.yunduan</groupId>            <artifactId>spring-boot-provider</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>    </dependencies></project>

到这里我的项目配置完成。
但是当我启动消费者的启动类的时候,出现了如下的错误:

com.alibaba.dubbo.rpc.RpcException: Fail to start server(url: dubbo://10.100.16.65:100/com.lixk.user.service.UserService?anyhost=true&application=dubbo-provider&bind.ip=10.100.16.65&bind.port=100&channel.readonly.sent=true&codec=dubbo&dubbo=2.5.7&generic=false&heartbeat=60000&interface=com.lixk.user.service.UserService&methods=sayHello&pid=9128&side=provider&timestamp=1511320215052) Failed to bind NettyServer on /10.100.16.65:100, cause: Failed to bind to: /0.0.0.0:100    at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol.createServer(DubboProtocol.java:277) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol.openServer(DubboProtocol.java:254) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol.export(DubboProtocol.java:241) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:94) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:56) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.registry.integration.RegistryProtocol.doLocalExport(RegistryProtocol.java:163) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.registry.integration.RegistryProtocol.export(RegistryProtocol.java:116) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:92) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:54) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.config.ServiceConfig.doExportUrlsFor1Protocol(ServiceConfig.java:499) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.config.ServiceConfig.doExportUrls(ServiceConfig.java:351) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.config.ServiceConfig.doExport(ServiceConfig.java:312) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.config.ServiceConfig.export(ServiceConfig.java:211) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.config.spring.ServiceBean.onApplicationEvent(ServiceBean.java:122) ~[dubbo-2.5.7.jar:2.5.7]    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:883) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144) ~[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]    at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]    at com.DoubboConsumerApplication.main(DoubboConsumerApplication.java:18) [classes/:na]Caused by: com.alibaba.dubbo.remoting.RemotingException: Failed to bind NettyServer on /10.100.16.65:100, cause: Failed to bind to: /0.0.0.0:100    at com.alibaba.dubbo.remoting.transport.AbstractServer.<init>(AbstractServer.java:70) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.remoting.transport.netty.NettyServer.<init>(NettyServer.java:63) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.remoting.transport.netty.NettyTransporter.bind(NettyTransporter.java:33) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.remoting.Transporter$Adaptive.bind(Transporter$Adaptive.java) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.remoting.Transporters.bind(Transporters.java:57) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchanger.bind(HeaderExchanger.java:41) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.remoting.exchange.Exchangers.bind(Exchangers.java:71) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol.createServer(DubboProtocol.java:275) ~[dubbo-2.5.7.jar:2.5.7]    ... 29 common frames omittedCaused by: org.jboss.netty.channel.ChannelException: Failed to bind to: /0.0.0.0:100    at org.jboss.netty.bootstrap.ServerBootstrap.bind(ServerBootstrap.java:303) ~[netty-3.2.5.Final.jar:na]    at com.alibaba.dubbo.remoting.transport.netty.NettyServer.doOpen(NettyServer.java:94) ~[dubbo-2.5.7.jar:2.5.7]    at com.alibaba.dubbo.remoting.transport.AbstractServer.<init>(AbstractServer.java:65) ~[dubbo-2.5.7.jar:2.5.7]    ... 36 common frames omittedCaused by: java.net.BindException: Address already in use: bind    at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_144]    at sun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_144]    at sun.nio.ch.Net.bind(Net.java:425) ~[na:1.8.0_144]    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[na:1.8.0_144]    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_144]    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.bind(NioServerSocketPipelineSink.java:148) ~[netty-3.2.5.Final.jar:na]    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.handleServerSocket(NioServerSocketPipelineSink.java:100) ~[netty-3.2.5.Final.jar:na]    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.eventSunk(NioServerSocketPipelineSink.java:74) ~[netty-3.2.5.Final.jar:na]    at org.jboss.netty.channel.Channels.bind(Channels.java:468) ~[netty-3.2.5.Final.jar:na]    at org.jboss.netty.channel.AbstractChannel.bind(AbstractChannel.java:192) ~[netty-3.2.5.Final.jar:na]    at org.jboss.netty.bootstrap.ServerBootstrap$Binder.channelOpen(ServerBootstrap.java:348) ~[netty-3.2.5.Final.jar:na]    at org.jboss.netty.channel.Channels.fireChannelOpen(Channels.java:176) ~[netty-3.2.5.Final.jar:na]    at org.jboss.netty.channel.socket.nio.NioServerSocketChannel.<init>(NioServerSocketChannel.java:85) ~[netty-3.2.5.Final.jar:na]    at org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory.newChannel(NioServerSocketChannelFactory.java:142) ~[netty-3.2.5.Final.jar:na]    at org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory.newChannel(NioServerSocketChannelFactory.java:90) ~[netty-3.2.5.Final.jar:na]    at org.jboss.netty.bootstrap.ServerBootstrap.bind(ServerBootstrap.java:282) ~[netty-3.2.5.Final.jar:na]    ... 38 common frames omitted

最后在这个这个链接上面找到了解决方法。

希望能够帮到大家。有错误的地方希望大神多多指教,毕竟我也是第一次搭这个框架。只是总结了一下坑点。

原创粉丝点击