1 开发说明
1.1 project说明
1.1.1 下载地址
工程下载地址:ssh://xxx@apaciccc5086:29418/emarket.git (用git)
demo工程下载地址:ssh://xxx@apaciccc5086:29418/microservice.git(用git)
xxx 表示自己的git用户名
1.1.2 一个parent工程,其他都是子工程
下载后,如下图所示:
有五个工程
l emarket : 父工程。最重要的是包含pom.xml文件。子工程的pom文件都继承它。开发不涉及。
l emarket-config-server : 子工程。配置项集中存放在这里,例如数据库url,数据库用户名和密码等公用的配置项。
l emarket-eureka-server : 子工程。服务注册与发现。开发不涉及。
l emarket-geteway : 子工程。服务网关。
l emarket-trade-service : 子工程。交易服务。需要开发。
每个子工程包含 application.properties和bootstrap.properties 配置文件。
1.1.3 工程启动顺序
先启动emarket-eureka-server, emarket-config-server。再启动具体的微服务工程,例如emarket-trade-service。
1.1.4 emarket-eureka-server 的配置说明
#端口号
server.port=8761
#地址
eureka.instance.hostname=localhost
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
# 客户端访问的 eureka地址 (重要)
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka
eureka.server.enableSelfPreservation=false
1.1.5 emarket-config-server 的配置说明
#eureka地址和端口 (重要)
eureka.client.serviceUrl.defaultZone=http://${eureka.host:APACICCC5088}:${eureka.port:8762}/eureka/
1.1.6 emarket-trade -service 的配置说明
#指明mybatis的总的sqlmap配置文件
mybatis.config=sql-map-config.xml
#eureka地址和端口 (重要)
eureka.client.serviceUrl.defaultZone=http://${eureka.host:APACICCC5088}:${eureka.port:8762}/eureka/
#serviceID (重要,一个微服务只能有一个名字)
spring.application.name=cloudservice
1.2 direct调用服务说明
map.put("pageFrom", (dataset.getPageNo() - 1)* dataset.getPageSize());
map.put("pageSize", dataset.getPageSize());
RestTemplate rt = (RestTemplate) ContainerManager.getComponent(RestTemplate.class);
Object obj[] = rt.postForObject("http://172.30.105.81:8181/test/", map, Object[].class);
long count = (Integer) obj[1];
List list = (List) obj[0];
RestTemplate 提供postForObject (url(请求url), request(请求参数), responseType(返回值类型))
1.3 服务调用服务说明
1 首先写一个调用接口,如下:
@FeignClient("cloudservice")
public interface IRemoteService {
//value是请求地址,method是请求方法(总共有get,post,put,delete)
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String query(@RequestBody Map<String, Object> map);
}
2 使用这个接口,例子如下:
@Service
public class AlopService implements IAlopService {
@Autowired
IRemoteService service = null;
//实际调用服务的地方
public String test3(){
return service.query();
}
}
1.4 开发一个微服务
1 首先写一个服务接口
public interface INameListService {
public Object[] queryNameList(Map<String, Object> map);
}
2 写接口的实现类
@Service
public class NameListSericeImpl implements INameListService {
@Resource(name = "defaultService")
private IDefaultService service = null;
@Override
public Object[] queryNameList(Map<String, Object> map) {
int pageFrom =0; //起始页
if(map.get("pageFrom")!=null){
pageFrom = Integer.parseInt((String)map.get("pageFrom"));}
int pageSize =10; //每页显示条数
if(map.get("pageSize")!=null){
pageSize = Integer.parseInt((String)map.get("pageSize"));}
//分页查询
return service.getCommonPaged(
"com.spdbccc.common.db.select.selectMyFollow", "com.spdbccc.common.db.select.countMyFollow", map ,
pageFrom , pageSize );
}
}
3 写一个controller对外暴露这个服务。
@Controller
public class NameListController {
@Autowired
INameListService service ;
@RequestMapping("/test")
@ResponseBody
public Object[] queryNameList(@RequestBody Map<String, Object> map){
return service.queryNameList(map);
}
}
1.5 REST URL对外接口定义规则
Http Methods
GET
获取,查找
POST
新增创建
PUT
更新
DELETE
删除
URL组成
网络协议(HTTP)
服务器地址(我们用服务名 spring.application.name)
版本
接口名称
?参数列表
1.5.1 Get方法示例:
@RequestMapping(value="/v1/alopApply/{applyId}",method=RequestMethod.GET)
public AlopApplyVO findByAlopApply(@PathVariable("applyId ") int applyId);
说明: applyId参数出现在url中,写@PathVariable ,才能获得{applyId}参数
/v1/alopApply/{applyId} v1表示版本号(v小写字母)
1.5.2 Post方法示例:
@RequestMapping(value="/v1/alopApply/add",method=RequestMethod.POST)
public int addAlopApply(@RequestBody Map<String, Object> map);
说明: post用作创建。请求过来的参数是集合或者自定义bean , 需要写 @RequestBody
1.5.3 Put方法示例:
@RequestMapping(value = "/v1/alopApply/edit", method = RequestMethod.PUT)
public String editUser(String user);
说明: put方法用作修改。
1.5.4 Delete方法示例:
@RequestMapping(value = "/v1/alopApply/delete/{applyId}", method = RequestMethod.DELETE)
public String removeUser(@PathVariable("applyId") int applyId);
说明: delete 删除操作(包括逻辑删除)。
1.5.5 总结
RequestMapping 只能添加在方法上,不能添加在接口上。
RequestMapping的value以版本号为前缀(“/version/path”),method必须提供并且只能限定为一种,比如:
@RequestMapping(value = "/v1/apply", method = RequestMethod.GET)
接口方法的名称必须以版本号为后缀,比如:searchV1(),findByIdV2();
接口方法必须提供完善且符合要求的注释,以便自动生成API文档。
分享到:
相关推荐
dubbo 微服务开发技术指导方案;dubbo 微服务开发技术指导方案
Micro是一个微服务生态系统。目标是简化分布式系统开发。 技术正在迅速发展。现在云计算能够给我们几乎是无限的scale能力,但是采用现有工具来使 用scale能力仍然是很困难的。Micro试图去解决这个问题,开发人员...
本课程为微服务上云开发的指导课程,涵盖微服务架构解析、服务中心、路由网关、...2. 了解各个微服务组件的运行机理,初步掌握微服务开发能力; 3. 了解DevOps持续交付理念,学会使用DevCloud完成简单的敏捷开发实践。
自己的案例,微服务学习开发案例,指导进行初级的微服务开发。入门很好的参考。
本课程为微服务上云开发的指导课程,涵盖微服务架构解析、服务中心、路由网关、服务生产与消费、缓存服务、消息系统等多个技术点的深度解析。 配备真实云端开发环境的实践作业,帮助开发者快速掌握微服务上云开发...
通过上述设计思想、方法和过程,指导团队按照 DDD 设计思想完成微服务设计和开发。 通过领域模型和 DDD 的分层思想,屏蔽外部变化对领域逻辑的影响,确保交付的软件产品是边界清晰的微服务,而不是内部边界依然混乱...
教程内容涵盖了从微服务架构设计到Docker容器化部署的全过程,通过实例演示和详细讲解,带领学习者逐步掌握Go语言在微服务开发中的应用技巧和最佳实践。 适用人群: 对Go语言和容器化微服务开发感兴趣的开发者和...
近些年来,微服务一直是非常热门的话题,关于微服务架构的讨论也是层出不穷。...本书从微服务架构本身的特征入手,讨论微服务组件的设计指导原则、有效通信的方式以及常见的安全挑战和数据模型的选择
#资源达人分享计划#
本课程为微服务上云开发的指导课程,涵盖微服务架构解析、服务中心、路由网关、服 务生产与消费、缓存服务、消息系统等多个技术点的深度解析。 配备真实云端开发环境的实践作业,帮助开发者快速掌握微服务上云开发...
HAP框架-开发指导手册.docx 基于Java流行开源技术构建 HAP使用业界最流行的开源技术搭建,框架本身也完全开源,做到真正的技术开放。满足传统Web和分布式应用开发 框架以适应经典的MVC架构和分布式大型应用开发为设计...
本指南主要在开发环境级别提供基础开发和体系结构指导,重点介绍以下两种技术:Docker 和 .NET Core。 我们的目标是为用户在应用程序设计时提供指导,使用户无需将重点放在其生产环境的基础结构(云端或本地)上。
PiggyMetrics是一个很全面的微服务实践入门的实例集,它可以指导开发者使用 Spring Boot、Spring Cloud 和 Docker 搭建微服务架构。 该开源项目有一个典型的微服务实现案例 - 个人理财微服务系统。采用Spring Boot/...
微服务技术构建大规模web系统的研究.pdf
基于微服务架构的智能数控系统.pdf
微服务架构是当今互联网应用开发的热门话题之一。通过学习微服务的概念和实践,我了解了如何将大型应用拆分成小的、自治的服务,并通过适当的通信机制实现它们之间的协作。这种分布式架构的设计思想为构建高度可伸缩...
毕业设计,基于微服务SpringBoot+Cloud+Apollo+Vue开发的前后端分离的实训管理系统,内含完整源代码,数据库 毕业设计—基于 SpringBoot + SpringCloudAlibaba + Kong + Apollo + Redis + MySQL + Vue + Amaze UI +...
微服务是需要与业务能力相匹配,这种说法完全正确。不幸的是,仍然意味着,如果能力模型粒度的设计是错误的,那么,我们就必须付出很多代价。如果你阅读了Fowler的整篇文章,你会发现,其中的指导建议是非常实用的。...
#资源达人分享计划#