1. 创建web服务

IDEA->File->New->Project->Empty Project,project name取名provider,点击finish

2. 创建provider module

在IDEA demo project中选择File->New->Module->Spring Initializer->Next,Artifact取名为provider

3. 在Depedencies中选择web中web,Cloud Discovery中Consul Discovery, Ops中选择Actuator,core中选择Lombok,如下所示:

web是spring-boot-starter-web, 是rest的spring boot web应用

consul discovery是consul的依赖包

actuator是spring boot提供的特性包,监控管理spring boot应用,其中提供的健康检查api被用于consul健康检查

4. 工程目录如下:

5. 添加一个rest api接口:

package com.example.provider.controller;

import com.example.provider.entity.ProviderPOJO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import java.util.Random;
import java.util.concurrent.atomic.AtomicLong; @RestController
@Slf4j
public class ProviderController {
private final AtomicLong counter = new AtomicLong(new Random().nextInt(1000)); @Value("${server.port}")
private int port; @RequestMapping("/demo")
public ProviderPOJO demo(@RequestParam(value = "name", defaultValue = "provider") String name) {
ProviderPOJO providerPOJO = new ProviderPOJO(counter.incrementAndGet(), name, port);
log.info("ProviderController:demo(): " + providerPOJO);
return providerPOJO;
}
}

pojo类:

package com.example.provider.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; @Data
@NoArgsConstructor
@AllArgsConstructor
public class ProviderPOJO {
private Long id;
private String name;
private Integer port;
}

6. 添加配置文件:src/main/resources/bootstrap.properties

主要启用了consul配置,并配置了consul的服务器地址和端口,其中instance-id用到了随机数,因为consul是以instance-id来区分一个同名服务的不同实例:

spring.application.name=provider
server.port=${PORT:8081}
spring.cloud.consul.enabled=true
spring.cloud.consul.port=8500
spring.cloud.consul.ribbon.enabled=true
spring.cloud.consul.discovery.enabled=true
spring.cloud.consul.discovery.register=true
spring.cloud.consul.discovery.prefer-ip-address=true
spring.cloud.consul.discovery.instance-id=${spring.application.name}:${spring.application.instance_id:${random.value}}:${server.port}

7. 启动本机consul注册发现服务中心(使用dev模式)

docker run --name consul0 -d -p : -p : -p : -p : -p : consul:1.2. agent -dev -bind=0.0.0.0 -client=0.0.0.0

8. 启动provider应用,从日志输出中可以看到,往id为provider-9769b141d132f135edca03091da8baf9-8080,name为provider,ip为192.168.33.74,端口为8080的服务:

9. 浏览器访问consul管理后台:

10. 浏览器访问provider的test接口:http://localhost:8080/test

11. 水平扩展provider微服务:

第一步: 更改bootstrap.properties中端口为8081

第二步:更改ProviderApplication启动配置,右上角勾选Share,不勾选Single instance only,如下所示:

第三步:再次运行provider工程,将存在两个provider的两个实例

浏览器访问consul管理后台:http:localhost:8500,则如下所示,会出现两个provider实例,端口分别为8080, 8081,浏览器访问provider的test接口,http://localhost:8080/test 和 http://localhost:8081/test,两个provider实例返回的id和port是不同的。

在consul上注册web服务的更多相关文章

  1. Dynamics AX 2012 R2 安装 AIF IIS上的Web服务

    1.为什么使用IIS上的WEB服务 组件? 如果你要在Dynamics AX Service中使用HTTP Adapter,那么你就要安装IIS上的WEB服务 组件.HTTP Adapter会在IIS ...

  2. 框架5--nginx安装部署 上(web服务)

    目录 框架5--nginx安装部署(web服务) 1.练习 2.昨日问题 3.今日内容 4.什么是web服务 5.web服务器软件 6.部署Nginx 7.平滑增加Nginx模块 8.Nginx的命令 ...

  3. IIS注册WEB服务扩展

    .net framework和iis那个先装的?如果先装IIS,然后再装.net的话,没有问题.但是如果顺序反了的话,需要在命令行里面执行 C:\Windows\Microsoft.NET\Frame ...

  4. Mac上开启Web服务

    $ sudo apachectl start$ httpd -v /Library/WebServer/Documents

  5. 主机访问虚拟机中linux上的web服务

    环境:主机windows xp 虚拟机centos 6.4 [root@localhost /]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT[root ...

  6. 【Java】Web 服务编程技巧与窍门: 在 UDDI 注册中心为 Web 服务注册开发 UDDI Java 应用程序

    本技巧建立了一个使用统一描述.发现和集成 (Universal Description, Discovery, and Integration,UDDI) 来注册应用程序级消费的 Web 服务实例.作 ...

  7. J2EE基础之Web服务简介

    J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...

  8. 高并发Web服务的演变:节约系统内存和CPU

    一.越来越多的并发连接数 现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置.虽然现 ...

  9. 转---高并发Web服务的演变——节约系统内存和CPU

    [问底]徐汉彬:高并发Web服务的演变——节约系统内存和CPU 发表于22小时前| 4223次阅读| 来源CSDN| 22 条评论| 作者徐汉彬 问底Web服务内存CPU并发徐汉彬 摘要:现在的Web ...

随机推荐

  1. BFC清除浮动

    BFC 就是清除浮动 用来处理文档脱离文档流的问题 清除浮动的方法: a.父元素也添加一个浮动 产生弊端就是:margin 不能使用 b.给父元素添加一个:display:inline-block 弊 ...

  2. intelij idea设置成eclipse快捷键

    1.导入jar包文件: https://pan.baidu.com/s/1QSd_CY5X_dUUw74evbckXg  密码: 23rq 2.idea -->settting ---> ...

  3. iOS sqlite大数据分段加载的实现,sqlite数据库的操作

    数据库管理类(自己封装的,挺简单的) // //  MyDataBaseManger.m //  DB_Test // //  Created by admin on 17/2/7. //  Copy ...

  4. Java 作业6

    我总算,又双叒叕拾起了Java,啊! 1.编写一个JApplet程序,包含一个JLabel对象,并显示用户的姓名. package experiment; import java.awt.Border ...

  5. int类型129转byte类型得到-127的解释

    package com.yygc.zhen.codeing_base; /** * @author zhen * @Date 2019/2/22 10:03 * 类型转换 */ public clas ...

  6. Spring 源码学习(1)—— 容器的基本实现

    最近在读Spring的源码,参考的是郝佳的<Spring源码深度解析>,这里把一些学习心得分享一下,总结的地方可能还有一些不完善,希望大家指教 IoC(控制反转)是Spring的特性之一, ...

  7. 2019-04-15-day032-多进程介绍

    内容回顾 基于原生socket的udp协议实现将client端发送过来的消息放到字典中 字典的key是所有客户端的地址,value是一个列表 io :输入输出, 输入到内存,向内存输入 从内存中向外( ...

  8. 【leetcode】429. N-ary Tree Level Order Traversal

    problem 429. N-ary Tree Level Order Traversal solution1:Iteration /* // Definition for a Node. class ...

  9. 【linux基础】cuDNN版本查询

    参考 1. 查看cudnn版本; 完

  10. cocos2dx创建win32项目一般步奏

    1.导入一个新项目步奏:解决方案:右键->添加->添加现有项目->添加依赖项目libCocoStudioD:\work\CannonDefender\cocos2d\cocos\ed ...