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。

相关推荐
PittDing29 分钟前
【更新】Docker新手入门教程2:在Windows系统通过compose创建多个mysql镜像并配置应用
windows·mysql·docker
time_silence2 小时前
微服务——数据管理与一致性
微服务·云原生·架构
Mitch3112 小时前
【漏洞复现】CVE-2014-3120 & CVE-2015-1427 Expression Injection
运维·web安全·elasticsearch·docker·apache
m0_748251083 小时前
docker安装nginx,docker部署vue前端,以及docker部署java的jar部署
java·前端·docker
顽疲3 小时前
从零用java实现 小红书 springboot vue uniapp (6)用户登录鉴权及发布笔记
java·vue.js·spring boot·uni-app
m0_748240253 小时前
docker--压缩镜像和加载镜像
java·docker·eureka
编程洪同学4 小时前
Spring Boot 中实现自定义注解记录接口日志功能
android·java·spring boot·后端
GraduationDesign5 小时前
基于SpringBoot的蜗牛兼职网的设计与实现
java·spring boot·后端
lmxnsI5 小时前
docker使用笔记
笔记·docker·容器
customer085 小时前
【开源免费】基于SpringBoot+Vue.JS安康旅游网站(JAVA毕业设计)
java·vue.js·spring boot·后端·kafka·开源·旅游