Java第四十六天,SpringCloud框架系列(六),为微服务增加第二个模块

一、新建项目

1.选中父工程,右键为父工程添加子模块

 

2.修改子模块的 pom.xml 配置文件,为其添加必要的库

<dependencies>
	<!--web 开发标配-->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<!--web 开发标配-->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>

	<!--热部署-->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<scope>runtime</scope>
		<optional>true</optional>
	</dependency>

	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<optional>true</optional>
	</dependency>

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>

</dependencies>

3.为子模块新增 yml 配置文件

server:
  # 80 接口是浏览器默认访问端口,这样可以让用户更加方便,无需手动输入端口号
  # 但是新版 idea 中如果直接使用 80 端口可能会出现问题,需要解决,所以这里先暂时用 8000
  port: 8000

 4.添加启动类

package com.lanyue.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

二、编写代码

注意:

       因为客户端(用户)是服务使用方,因此它不需要,也不应该具备操作后台数据库、左右业务功能的能力,他只需要调用后台的其他服务即可(购物、支付、退款 ......);所以客户端只需要有 Controller 层即可,但是它又用到了支付模块的一些实体类和公用工具类,因此需要对应的工具包和实体类包及其代码

1.编写通用客户端返回工具类,JsonResult

package com.lanyue.order.entities;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;

/**
 * 支付实体类
 */
// 替换 get set 方法
@Data
// 全参构造函数
@AllArgsConstructor
// 空参构造函数
@NoArgsConstructor
// 实现序列化接口
public class Payment implements Serializable {

    private Long id;
    private String serial;
}

2.编写 Payment 实体类(与第一个模块的实体类完全一样,这里是为了减少模块间的依赖,直接重新写一份)

package com.lanyue.order.entities;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;

/**
 * 支付实体类
 */
// 替换 get set 方法
@Data
// 全参构造函数
@AllArgsConstructor
// 空参构造函数
@NoArgsConstructor
// 实现序列化接口
public class Payment implements Serializable {

    private Long id;
    private String serial;
}

3.新建一个配置文件

package com.lanyue.order.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextConfig {

    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

4.编写客户端访问 controller

package com.lanyue.order.controller;

import com.lanyue.order.entities.Payment;
import com.lanyue.order.util.JsonResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;

@RestController
public class OrderController {

    // 被调用模块 Payment 的基础访问路径
    public static final String PAYMENT_URL = "http://localhost:8080/springcloud";

    // 一个 controller 调用另一个服务的 controller 本质上是使用 HttpClient/HttpURLConnection 进行接口的调用
    // 但是后面出现了一些对这基本工具的功能封装,例如 RestTemplate,Feign

    @Resource
    private RestTemplate restTemplate;

    // 调用 Payment 模块的 controller 接口
    @PostMapping("/consumer/payment/insert")
    public JsonResult<Payment> insert(@RequestBody Payment payment){
        return restTemplate.postForObject(PAYMENT_URL + "/payment/insert", payment, JsonResult.class);
    }

    // 调用 Payment 模块的 controller 接口
    @GetMapping("/consumer/payment/selectPaymentById")
    public JsonResult<Payment> selectPaymentById(@RequestParam("id")  String id){
        return restTemplate.getForObject(PAYMENT_URL + "/payment/selectPaymentById" + "?id=" + id, JsonResult.class);
    }
}

5.测试

 

三、友情小提示

因为 springcloud 项目会包含很多 springboot 项目,这时候我们开启一个项目需要手动选中所有的 springboot 项目,为了方便我们会使用到 RunDashboard 工具统一启动/关闭所有的 springboot项目,如下图所示:

如果 IDEA 中没有显示这个组件的话,我们选中最外层的 springboot(parent 项目),然后右键选择 show in explorer 或 open in explorer;然后进入项目中的 .idea 隐藏文件夹,修改 workspace.xml 配置文件,添加如下组件;最后选中 view ==> tool windows ==> services 或 RunDashboard 

<component name="RunDashboard">
  <option name="configurationTypes">
    <set>
      <option value="SpringBootApplicationConfigurationType" />
    </set>
  </option>
</component>

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
# springcloud-zone #### 项目介绍 项目为学习用途搭建,主要包括以下模块springcloud-register:服务注册中心 (eureka-server),提供服务注册与发现功能。 springcloud-config:远程配置中心,分为git与native两个版本,为producer提供远程配置。 springcloud-connect:数据连接中心,包含DB、Redis、MQ、Mail等组件的配置入口,只需其他模块在pom中添加依赖并提供相关配置即可快速接入。 springcloud-producer:服务提供者,包含具体的业务逻辑实现等。 springcloud-consumer:服务消费者,从eureka server中获取producer提供的服务。 springcloud-gateway:网关接口,暴露给调用方调用,包含负载均衡、重试、熔断等功能。 springcloud-zipkin:链路跟踪工具,监控并就持久化微服务集群中调用链路的通畅情况,采用rabbitmq异步传输、elasticsearch负责持久化的方式集成。 #### 软件架构 1、JDK:jdk-8u181-windows-x64。 2、MAVEN:apache-maven-3.5.4 3、IDE:spring-tool-suite-3.9.3.RELEASE-e4.7.3-win32-x86_64 4、springboot:1.5.10.RELEASE。 5、springcloud:Edgware.SR2版本 #### 安装教程 需要提前安装如下程序: 1、ActiveMQ。 2、RabbitMQ。 3、Redis 4、Elasticsearch。 5、Elasticsearch-head。 6、MYSQL(执行springcloud-producer目录src/main/resources/templates/datasource.text中的建表语句) #### 使用说明 项目运行顺序: 1、 springcloud-register, 2、 springcloud-config-native或者springcloud-config-git: 启动git远程配置中心需要修改springcloud-producer项目的bootstrap.yml配置文件,并将配置配件上传到git上。 3、springcloud-zipkin。 4、 springcloud-producer。 5、springcloud-consumer。 6、springcloud-gateway. 注: 在测试gateway负载均衡时可以启动单个项目的多个实例,具体方式如下: 1、项目启动类右键run as->run configurations..,打开配置框。 2、java application右键new,打开新建窗口。 3、顶部tab选中Main,在name中填写启动类名称,project中填写项目名称,main class中填写启动类详细路径+类名。 4、顶部tab选中Arguments,在VM arguments中填写-Dserver.port=端口号,比如-Dserver.port=8080 5、点击run即可以配置的端口号启动多个项目实例了。 #### 参与贡献 ningchongqing

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT蓝月

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值