網上查了查 ActiveMQ + .net core 的例子很少,自己做一個demo 作為記錄,另外FineUI Core基礎版要來了,出來后我會用FineUI再做一版,為知識星球的引流...

1.安裝SDK 准備ActiveMQ 服務
此處用的 .net core 2.0+
此處用的 apache-activemq-5.9.0
2.創建項目



3.引用樣式
4.引用DLL


注意:先安裝 Apache.NMS.NetCore 再安裝 Apache.NMS.ActiveMQ.NetCore

5.抄襲一個ActiveMQHelp
來自 https://blog.csdn.net/PeterPan_hai/article/details/52354913
這里未做任何修改,正常添加引用即可



6.寫代碼
引用 paho-mqtt.js


直接重寫 View/Home/Index.cshtml
@{
ViewData["Title"] = "全球都比較大的聊天室";
}
@section body{
<h2>@ViewData["Title"]</h2>
<form id="form1"></form>
}
@section Scripts{
@*框架已經引用了*@
@*<script src="~/js/MQTT/paho-mqtt.js"></script>*@
<script>
$(document).ready(function () {
InitPage();//准備頁面
ItinPahoClient();//准備鏈接
});
//核心方法:通過MQtt連接
function ItinPahoClient() {
//地址 端口 鏈接名稱(不是主題)
var client = new Paho.Client("沒神的IP,大伙都知道", 61614, "jsclient");
//監聽事件
client.onMessageArrived = function (msg) {
//收到消息
messagebox.append("接收到消息:" + msg.payloadString);
$('#textbox').val('');
};
//鏈接配置
client.connect({
onSuccess: function () {
messagebox.append('鏈接成功');
//訂閱主題為myqueue
client.subscribe("myqueue");
//發布消息,主題為myqueue2
//client.publish("myqueue2", "Message from js client");
}
});
}
//發送消息
function setmessage() {
var v = $('#textbox').val();
bsEx.dopostback('@Url.Action("SetMessage")', {"msg":v}, function (t) {
eval('(' + t + ')');
});
}
///初始化頁面
function InitPage() {
//表單
new bsEx.ItemForm({
id: "form1",
renderto: '#form1',
items: [
{ type: 'textarea', name: 'messagebox', title: '消息', height: '300px' },
{ type: 'text', name: 'textbox', title: '發送' }
],
colunb: 1, showlabel: false, css: { 'width': '500px' }
}).init().attr("onkeydown","if(event.keyCode == 13) { return false; }");
//發送按鈕
var btn = $('#textbox').addbutton("發送");
btn.on('click', function () {
setmessage();
})
$('#footer span').prepend("v" + $.fn.bsEx);
//重寫append 加個回車
messagebox = $('#messagebox');
messagebox.append = function () {
arguments[0] = arguments[0] +' \r\n ';
($.fn.append).apply(this,arguments);
}
messagebox.append('...鏈接中');
}
//再text后面加一個button
$.fn.addbutton = function (text) {
$(this).parent().addClass('input-group');
var bid = $(this).attr('id') + '-btn';
var b = $('<span class="input-group-addon btn" id="' + bid + '">' + text + '</span >');
$(this).after(b);
$(this).attr("onkeydown", "if(event.keyCode == 13) { setmessage(); }");
return $(b);
}
</script>
}
注意:前台的核心方法 ItinPahoClient();
修改 Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ActiveMQTest.Controllers;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace ActiveMQTest
{
public class Program
{
/// <summary>
/// MQ
/// </summary>
public static ActiveMQHelp mymq { get; set; }
public static void Main(string[] args)
{
//開始鏈接和訂閱主題
mymq = new ActiveMQHelp(isLocalMachine: false, remoteAddress: "沒神的IP,大伙都知道");
//主題名稱 myqueue 與前台一致 ,這里注意區分 topic 和 queue的區別
Program.mymq.InitQueueOrTopic(topic: true, name: "myqueue", selector: false);
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
}
修改 Controllers/HomeController.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using ActiveMQTest.Models;
namespace ActiveMQTest.Controllers
{
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SetMessage(string msg)
{
//發送
Program.mymq.SendMessage(msg, "newid", priority: Apache.NMS.MsgPriority.Lowest);
return Content("console.log(\""+ msg + " 發送成功\");");
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult GetMessage()
{
//后台拿一次
return Content("console.log(\"" + Program.mymq.GetMessage() + "\");") ;
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
至此,代碼全部完成,可以運行,只要IP對,基本沒啥大問題,不會的問我,源碼這里下載

