- 2023-03-04 15:17:19
- 3891 热度
- 0 评论
需要什么?
Zookeeper,如果在Linux上安装就参考(http://www.javacui.com/opensource/445.html )。
如果在Windows上,新版本可以直接在Windows运行,只需修改zoo.cfg配置文件即可。
如何设计
之所以用Dubbo,就是为了应付团队模块开发,所以这里会有两个工程,服务和使用。
服务者要提供接口API,和API的具体实现,然后基于类似Spring配置进行Bubbo服务的注册。
使用者拿到API,并实用类似Spring配置相应的对象的引用,然后在代码中可以像平常一个工程中一样使用该即可。
那么这个和一个工程里面的Spring配置有什么区别?在我看来无非就是参数或者返回类型的兼容性,例如本地Spring你可以直接传递某个对象而且不受限制,但是默认情况下Dubbo只能实用其兼容的JDK对象。
官方文档地址:http://dubbo.io/Home-zh.htm
要引用那些Lib
这里我也实用Maven来配置吧,这年头难以再继续往Lib里面加Jar包了。
这里我给出我的示例工程dependency,我这里就是把该有的包引用过来了,其他还包含了MyBatis,数据库连接池,FastJson等。
<dependencies> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.5</version> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.4.9</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.6</version> </dependency> <dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-memcached</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.26</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.0</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>3.2.8.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.5</version> </dependency> </dependencies>
其他配置请自便,或者根据需要自行修改,总之别少包或者冲突就得。
有哪些配置文件
然后我们还要log4j.properties配置文件,这里就配置只输出到控制台了。
log4j.rootLogger=INFO,stdout log4j.logger.com.test=DEBUG log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] %-5p %c{1} - %m%n
dubbo的配置文件dubbo.properties
dubbo.spring.config=classpath*:spring-config.xml dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.application.name=comTest dubbo.protocol.name=dubbo dubbo.protocol.port=20880 dubbo.protocol.accesslog=/data/logs/test/access.log dubbo.monitor.protocol=registry dubbo.provider.timeout=6000 dubbo.provider.delay=-1 dubbo.provider.retries=0
spring-config.xml是Spring主配置文件
<?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:tx="http://www.springframework.org/schema/tx" 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://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 自动扫描的包名 --> <context:component-scan base-package="com.test"></context:component-scan> <context:annotation-config></context:annotation-config> <import resource="classpath*:spring/spring-*.xml" /> </beans>
spring-provide.xml在spring文件夹下,用来注册服务提供者,而使用者则用来注册相应的对象。
<?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:service interface="com.test.DubboApi" ref="dubboApi"/> <!-- 和本地bean一样实现服务 --> <bean id="dubboApi" class="com.test.DubboService" /> </beans>
如果是使用者
<?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:reference id="testApiDubbo" interface="com.test.DubboApi"/> </beans>
需要写那些代码
如果是提供者,要提供API
package com.test; import java.util.Map; public interface DubboApi { public Map<String, Object> sayHello(Map<String, Object> para); }
API实现
package com.test; import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSON; public class DubboService implements DubboApi{ @Override public Map<String, Object> sayHello(Map<String, Object> para) { System.out.println(JSON.toJSONString(para, false)); Map<String, Object> re = new HashMap<String, Object>(); re.put("reA", "reA"); re.put("reB", "reB"); return re; } }
如果测试实用
服务提供者如要写一个测试方法,把自己的服务注册上去提供服务,同时把API的Jar给使用者
package com.test.service; import java.io.IOException; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ServerMain { @SuppressWarnings("unused") public static void main(String[] args) throws IOException, InterruptedException, Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "spring-config.xml" }); System.in.read(); // 防止系统退出 } }
注册提供服务,启动Spring即可。
使用者,注册该对象,然后实用即可,同样也是启动Spring容器,用测试代码来实现。
package com.test.api; import java.util.HashMap; import java.util.Map; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.alibaba.fastjson.JSON; import com.test.DubboApi; public class DubboServiceTest { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "spring-config.xml" }); DubboApi dubboApi = (DubboApi) context.getBean("testApiDubbo"); new DubboServiceTest().sayHello(dubboApi); } public void sayHello(DubboApi dubboApi) throws Exception { Map<String, Object> param = new HashMap<String, Object>(); param.put("paraA", "paraA"); Map<String, Object> resultMap = dubboApi.sayHello(param); System.out.println(JSON.toJSONString(resultMap, true)); } }
服务提供者代码目录结构
服务使用者代码目录结构
代码下载:
结束。
- Spring(403)
- Boot(208)
- Spring Boot(187)
- Java(82)
- Cloud(82)
- Spring Cloud(82)
- Security(60)
- Spring Security(54)
- Boot2(51)
- Spring Boot2(51)
- Redis(31)
- SQL(29)
- Mysql(25)
- IDE(24)
- Dalston(24)
- JDBC(22)
- IDEA(22)
- mongoDB(22)
- MVC(22)
- Web(21)
- CLI(20)
- Alibaba(19)
- SpringMVC(19)
- SpringBoot(17)
- Docker(17)
- Git(16)
- Eclipse(16)
- Vue(16)
- ORA(15)
- JPA(15)
- Apache(15)
- Mybatis(14)
- Oracle(14)
- jdk(14)
- Tomcat(14)
- Linux(14)
- HTTP(14)
- XML(13)
- JdbcTemplate(13)
- OAuth(13)
- Nacos(13)
- Pro(13)
- Data(12)
- JSON(12)
- OAuth2(12)
- stream(11)
- int(11)
- Myeclipse(11)
- not(10)
- Bug(10)
- maven(9)
- Map(9)
- Hystrix(9)
- ast(9)
- APP(8)
- Bit(8)
- API(8)
- session(8)
- Window(8)
- Swagger(8)
- Github(7)
- JavaMail(7)
- Cache(7)
- File(7)
- IntelliJ(7)
- mail(7)
- windows(7)
- too(7)
- HTML(7)
- RabbitMQ(6)
- star(6)
- and(6)
- Excel(6)
- Log4J(6)
- pushlet(6)
- apt(6)
- Freemarker(6)
- read(6)
- WebFlux(6)
- JSP(6)
- Bean(6)
- error(6)
- Server(6)
- nginx(6)
- jar(6)
- ueditor(6)
- ehcache(6)
- UDP(6)
- rdquo(5)
- PHP(5)
- Struts(5)
- string(5)
- script(5)
- Syntaxhighlighter(5)
- Tool(5)
- Controller(5)
- swagger2(5)
- ldquo(5)
- input(5)
- Servlet(5)