运行NET Core 7应用程序的Windows Azure应用程序服务与运行“jar”文件的MassTransit,如何?

aoyhnmkz  于 2023-08-07  发布在  Windows
关注(0)|答案(1)|浏览(106)

因此,我们有一个在Azure应用服务中运行的.NET Core 7 MassTransit主机,其中一个命令处理程序应该进行“java.exe-jarDoSomeThing.jar”调用。我们的问题是,我们如何在App Service中实现这一点?

  • 在部署应用程序时以某种方式安装Java SDK?
  • 将JavaSDK作为嵌入文件复制到一个文件夹中(就像我们对.jar所做的那样)
  • 将SDK嵌入到.jar文件中(不知道这是否可行)
  • 还有什么建议吗

创建Java App Service对我们来说不是一个好的解决方案,因为MassTransit处理程序正在管理此调用并检索结果。任何建议都将受到赞赏。

  • 谢谢-谢谢
nkkqxpd9

nkkqxpd91#

  • 不可能在单个App Service示例中直接混合不同的运行时堆栈。

创建一个Java应用程序服务对我们来说不是一个好的解决方案。

  • 在不创建单独的应用服务的情况下,我们可以使用Docker容器化.NET Core和Java应用程序。您可以将.NET Core 7 Mass Transit主机和Java可执行文件(DoSomeThing.jar)打包到单个容器中,请查看下面的模板。
# Set the base image to a Linux distribution that supports both .NET Core and Java
FROM mcr.microsoft.com/dotnet/aspnet:7.0-jdk11

# Set the working directory inside the container
WORKDIR /app

# Copy the .NET Core project files to the container
COPY MyMassTransitHost.csproj .

# Restore the .NET Core dependencies
RUN dotnet restore

# Copy the entire project to the container
COPY . .

# Build the .NET Core application
RUN dotnet publish -c Release -o out

# Copy the Java application (DoSomeThing.jar) to the container
COPY DoSomeThing.jar .

# Set the entry point to start both the .NET Core MassTransit Host and the Java application
CMD ["sh", "-c", "dotnet /app/out/MyMassTransitHost.dll & java -jar /app/DoSomeThing.jar"]

字符串

  • 将Docker镜像推送到容器注册表。在门户中创建应用服务时,运行时可以是.Net,发布应该是Docker容器。


的数据

  • 使用自定义Docker镜像部署.NET Core App Service。
  • 一旦您的.NET Core App Service使用自定义Docker映像运行,请更新MassTransit命令处理程序以执行Java命令。
using System.Diagnostics;

public class MyCommandHandler
{
    public void HandleCommand()
    {
        // Replace "/path/to/java" with the appropriate path to the Java executable in the container
        string javaExecutable = "/path/to/java";
        
        // Replace "/app/DoSomeThing.jar" with the actual path to the JAR file inside the container
        string jarFile = "/app/DoSomeThing.jar";
        
        // Replace "YourJavaOptions" with any additional Java options you want to pass
        string javaOptions = "YourJavaOptions";
        
        ProcessStartInfo startInfo = new ProcessStartInfo
        {
            FileName = javaExecutable,
            Arguments = $"{javaOptions} -jar {jarFile}",
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false,
            CreateNoWindow = true
        };
        
        using (Process process = new Process())
        {
            process.StartInfo = startInfo;
            process.Start();
            
            // You can optionally read the process output if needed
            string output = process.StandardOutput.ReadToEnd();
            string error = process.StandardError.ReadToEnd();
            
            process.WaitForExit();
        }
    }
}


这样我们就可以在同一个应用服务中直接执行Java JAR文件。

相关问题