虽然Spring Boot能够无缝的和Spring cloud对接。但仍是想试下Spring Boot + Dubbo怎么玩java
根据Dubbo的官网介绍git
https://github.com/apache/incubator-dubbo-spring-boot-projectgithub
须要添加依赖以下:spring
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.1.0</version> </dependency>
###配置文件apache
按照文档,设置的配置问价以下,zk做为注册中心。json
server: port: 8083 spring: profiles: dev logging: level: debug path: D:/log/ #dubbo注册部分 dubbo: scan: #将这些包下面的Dubbo相关注解扫描到容器中 base-packages: cn.com.boostarp.service application: id: dubbo-provider-demo name: dubbo-provider-demo protocol: name: dubbo #dubbo注册地址 registry: id: zk_address #注册地址 address: localhost:2181;localhost:2182;localhost:2183 #使用的协议 protocol: zookeeper timeout: 6000
对外提供的服务包路径应当包含与YML配置的路径下面tomcat
package cn.com.boostarp.service; import java.util.Map; public interface ProviderService { Map<String, Object> getMsg() throws Exception; }
对应的实现app
package cn.com.boostarp.service.impl; import cn.com.boostarp.service.ProviderService; import com.alibaba.dubbo.config.annotation.Service; import java.util.HashMap; import java.util.Map; //这个Service注解是Dubbo提供的 @Service public class ProviderServiceImpl implements ProviderService { @Override public Map<String, Object> getMsg() throws Exception { Map<String, Object> listMap = new HashMap<String, Object>(5); listMap.put("f", "1"); listMap.put("g", "1"); return listMap; } }
最后一步在启动生产者的时候,重启后,tomcat会自动中止。最后在看Dubbo的版本是2.0.1。估计是Dubbo版本过低的缘故,因此须要本身手动引入高版本的Dubbo模块,修改配置文件以下:须要排除 dubbo-spring-boot-starter 中依赖的2.0.1版本,而后再从新引入2.6.1版本。ide
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.1.0</version> <exclusions> <exclusion> <artifactId>com.alibaba</artifactId> <groupId>dubbo</groupId> </exclusion> </exclusions> </dependency> <!-- 从新引入2.6.1 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.1</version> </dependency>
从新启动后,就能将服务注册上去。spring-boot
测试:invoke cn.com.boostarp.service.ProviderService.getMsg()。发现消息转换错误.
添加fastJSON依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
添加响应的消息转换器
@Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { /** * {@inheritDoc} * <p>This implementation is empty. * * @param converters */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { super.configureMessageConverters(converters); //定义一个json消息转换对象 FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); //添加配置信息 FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); //2-1 处理中文乱码问题 List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastConverter.setSupportedMediaTypes(fastMediaTypes); //三、在convert中添加配置信息 fastConverter.setFastJsonConfig(fastJsonConfig); //四、将convert添加到converters中 //HttpMessageConverter<?> converter = fastConverter; converters.add(fastConverter); } }
至此,对应的服务就注册到zk中心了。