springboot+docker实现微服务的小例子

【任务】:

创建一个服务A:service_hello

创建一个服务B:service_name

service_name负责提供一个api接口返回一个name字符串。

service_hello负责从这个接口获取name字符串,然后进行一个字符串拼接,在后面加一个hello,最后输出。

这就构成了一个最简单的微服务。微服务之间通过http的api接口可以互相交换数据。配合完成一个大工作。


Service_name微服务

首先实现service_name这个微服务:

可以直接利用这个网站:https://start.spring.io/ 创建一个springboot项目

在controller部分就简单的定义一个api:

功能非常简单,就是返回一个"Jerry!"字符串

java 复制代码
package com.example.service_name.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainController {
    @GetMapping("/name")
    public String name() {
        return "Jerry!";
    }

}

经过本地测试一切ok之后,将该项目通过maven打成一个jar包:

使用maven命令:mvn clean package

最后会在项目的target目录下形成一个jar包。可以直接通过

java 复制代码
java -jar XXX.jar 

来运行这个jar包


然后在IDEA里面安装docker插件。在项目根目录下编写Dockerfile文件

内容大致如下即可:

java 复制代码
# 使用一个基础的Java镜像作为基础
FROM openjdk:22-slim

# 设置工作目录
WORKDIR /app

# 将应用程序的JAR文件复制到容器中
COPY target/service_name-0.0.1-SNAPSHOT.jar .

# 暴露应用程序的端口
EXPOSE 8081

# 设置启动命令
CMD ["java", "-jar", "service_name-0.0.1-SNAPSHOT.jar"]

然后使用

bash 复制代码
docker build -t service_name .

来将项目打包成一个名为service_name的镜像。

打包好的镜像存放在本地的docker仓库里面,可以使用命令:

c 复制代码
docker images

查看本地镜像。


然后通过

c 复制代码
docker run -p 8081:8081 service_name

命令可以直接运行service_name镜像,运行之后就成容器了。

这时候我们在浏览器输入localhost:8081/name就可以直接查看到字符串"Jerry!"输出到网页上了

那么目前service_name这个微服务我们就部署完毕!


Service_hello微服务

接下来我们就创建Service_hello这个微服务,来使用service_name提供的api完成功能

在Service_hello里面主要流程和前面一样,主要有几个小区别

首先会加一个配置类,因为需要用到RestTemplate去进行http通信。

所以在config包里面创建一个类:

java 复制代码
package com.example.service_hello.config;

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

@Configuration
public class AppConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

controller里面有一些修改:

java 复制代码
package com.example.service_hello.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class MainController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/hello")
    public String hello() {
        //service_name的api地址
        String url = "http://localhost:8081/name";
        ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
        return response.getBody() + ", Hello!";
    }
}

最后在本地浏览器输入:

localhost:8081/hello

之后就可以看到浏览器的结果了:


【总结】

本文使用 docker技术,实现了一个非常简单的微服务架构demo。

相关推荐
知白守黑2673 小时前
docker资源限制
运维·docker·容器
无妄无望7 小时前
docker学习(4)容器的生命周期与资源控制
java·学习·docker
MC丶科7 小时前
【SpringBoot 快速上手实战系列】5 分钟用 Spring Boot 搭建一个用户管理系统(含前后端分离)!新手也能一次跑通!
java·vue.js·spring boot·后端
爱宇阳9 小时前
禅道社区版 Docker Compose 服务迁移教程
运维·docker·容器
安当加密9 小时前
云原生时代的数据库字段加密:在微服务与 Kubernetes 中实现合规与敏捷的统一
数据库·微服务·云原生
lang201509289 小时前
Spring Boot 入门:5分钟搭建Hello World
java·spring boot·后端
xzl049 小时前
docker运行Ubuntu22.04
docker
Javashop_jjj10 小时前
三勾软件| 用SpringBoot+Element-UI+UniApp+Redis+MySQL打造的点餐连锁系统
spring boot·ui·uni-app
vue学习11 小时前
docker 学习dockerfile 构建 Nginx 镜像-部署 nginx 静态网
java·学习·docker