java多线程    Java入门    vsftp    ftp    linux配置    centos    FRP教程    HBase    Html5缓存    webp    zabbix    分布式    neo4j图数据库    

Nacos微服务实践-服务的生产者消费者

1.打造一个服务提供者项目名字nacos-provider1

pom依赖

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

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>

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

启动类

@SpringBootApplication
@EnableDiscoveryClient //开启服务发现功能
public class NacosProvider1Application {
    public static void main(String[] args) {
        SpringApplication.run(NacosProvider1Application.class, args);
    }
}

就好了

提供一个服务

controller.DeptController

@RestController
@Slf4j
public class DeptController {
    @Value("${server.port}")
    private String serverPort;

    @Value("${spring.application.name}")
    private String name;
    @GetMapping(value = "/dept/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id) {
        return "<h2>我是服务提供方,我来提醒您,服务访问成功!</h2>服务名:"+ name +"<br /> 端口号: " + serverPort + "<br /> 传入的参数:" + id;
    }
}

application.properties

# 应用名称
spring.application.name=nacos-provider1
#端口号
server.port=8001
#Nacos Server 的地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*

2.造一个服务消费者nacos-consumer1

<!--SpringCloud ailibaba nacos discovery-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
<!--由于 Netflix Ribbon 进入停更维护阶段,因此新版本的 Nacos discovery 都已经移除了 Ribbon ,此时我们需要引入 loadbalancer 代替 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

applicaiton.yml

server:
  port: 8002  #端口号
spring:
  application:
    name: nacos-consumer1 #服务名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #Nacos server 的地址
#以下配置信息并不是默认配置,而是我们自定义的配置,目的是不在 Controller 内硬编码服务提供者的服务名
service-url:
  nacos-user-service: http://nacos-provider1    #服务提供者的服务名

一个配置类读取 RestTemplate

@Configuration
public class MyConfig {

    @Bean
    @LoadBalanced //与 Ribbon 集成,并开启负载均衡功能
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

一个controller类来消费提供者的服务

@RestController
@Slf4j
public class ConsumerDoController {

    @Resource
    private RestTemplate restTemplate;
    @Value("${service-url.nacos-user-service}")
    private String serverURL; //服务提供者的服务名
    @GetMapping("/consumer/dept/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id) {
        return restTemplate.getForObject(serverURL + "/dept/nacos/" + id, String.class);
    }
}

http://localhost:8002/consumer/dept/nacos/100

image-20220923102522804

Nacos服务列表展示内容

image-20220923102551493

Nacos下线一个服务

curl -X DELETE '127.0.0.1:8848/nacos/v1/ns/service?serviceName=nacos-consumer1'

这个订阅者列表不是指消费者列表,而是指主动向Nacos Server发起事件监听的订阅者,比如健康检查、服务变更等事件监听的订阅者,具体可查看NacosDiscoveryEndpoint.nacosDiscovery()方法中是通过EventDispatcher去获取订阅者列表和发布事件

3.启动第二个服务提供者

nacos-provider1子项目打包(为了生成独立可以执行的jar文件,我们修改子项目pom.xml文件)

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>
                    com.javaer.nacosprovider1.NacosProvider1Application
                </mainClass>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>

            <executions>
                <execution>
                    <goals>
                        <!--可以把依赖的包都打包到生成的Jar包中-->
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>

        </plugin>

    </plugins>
</build>

启动一个8004端口作为第二个提供者

java -jar nacos-provider1.jar --server.port=8004

image-20220923111732568

系统有了2个服务提供者,这时候我们刷新http://localhost:8002/consumer/dept/nacos/100

发现有时候显示端口号为8004,有时候显示为8001

微服务后端自动集群了。一个服务者挂了,还有一个服务者提供服务,我建立10个服务提供方是否可以,可以啊。服务器多,用100个也成。

服务提供者

https://github.com/yuexiaosheng/javaer/tree/main/nacos-provider1

服务消费者

https://github.com/yuexiaosheng/javaer/tree/main/nacos-consumer1


This entry was posted in JAVA. Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/nacos-micro-service-consumer-provider/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.

Leave a Reply