libvirt 启用TCP远程连接,windows平台java调用示例

1、开启TCP连接

编辑 /etc/libvirt/libvirtd.conf,去掉 listen_tls = 0listen_tcp = 1tcp_port = "16509" 三行前面的注释

编辑 /etc/sysconfig/libvirtd,去掉 LIBVIRTD_ARGS="--listen" 前面的注释

执行服务重启命令:

systemctl restart libvirtd

2、安装 windows 平台下的 Libvirt 客户端,下载地址如下:

https://libvirt.org/sources/win32_experimental/Libvirt-0.8.8-0.exe

3、新建 maven 项目进行 java sdk 调用(必须装32位的jdk,64位的会有问题)

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>libvirt-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>5.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.libvirt</groupId>
            <artifactId>libvirt</artifactId>
            <version>0.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.14.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

 

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="WARN" monitorInterval="30">
    <!--先定义所有的appender-->
    <appenders>
        <!--这个输出控制台的配置-->
        <console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式-->
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        </console>
    </appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>
        <root level="all">
            <appender-ref ref="Console"/>
        </root>
    </loggers>
</configuration>

 

LibvirtTest:(注释掉的都是运行时会报错的,坑比较多)

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;
import org.libvirt.Connect;
import org.libvirt.LibvirtException;

public class LibvirtTest {

    private static final Logger logger = LogManager.getLogger(LibvirtTest.class);

    @Test
    public void test() throws LibvirtException {
        Connect connect = new Connect("qemu+tcp://172.16.20.17:16509/system", true);
//        logger.info("连接到的宿主机的主机名:{}", connect.getHostName());
        logger.info("JNI连接的libvirt库版本号:{}", connect.getLibVirVersion());
//        logger.info("连接的URI:{}", connect.getURI());
        logger.info("连接到的宿主机的剩余内存:{}", connect.getFreeMemory());
        logger.info("连接到的宿主机的最大CPU:{}", connect.getMaxVcpus(null));
        logger.info("hypervisor的名称:{}", connect.getType());

        int[] ids = connect.listDomains();
        for (int id : ids) {
            System.out.println(connect.domainLookupByID(id).getName());
        }

//        String[] domains = connect.listDefinedDomains();
//        for (String domain : domains) {
//            System.out.println(domain);
//        }

    }

}

 

后续

在 CentOS7 上正常使用64位 jdk,安装 libvirt,执行上面的函数注释是不会报错的,可能 libvirt 版本不一样也有关系吧

posted @ 2021-07-13 14:15  Nihaorz  阅读(529)  评论(0编辑  收藏  举报