Recommended GSM module for remote Arduino based MQTT client

I'm looking into the options for putting together a cellular Arduino MQTT client. I'm located in southern Manitoba Canada so I think my best option is Rogers for the data connection. I have previously (9 yrs ago) worked on a project using a Sanguino with a GM862-GPS for a remote temperature monitoring system. I still have several GM862-GPS modules that I wouldn't mind making use of but at the same time I don't see much support in terms of libraries etc to speed up development so I'm willing to go with a newer more modern GSM module. Another option might be to use a 3G router with an ESP8266.

Are there GSM shields/modules that can be used with the PubSubClient library? Which ones?

I see the Arduino store shows the two official GSM shields as retired, is there an official replacement?
Robotshop has ones based on the SIM900, SIM808/F/H, M95, M66, MC60, Ai-think A7 & the official retired v2. Ranging from $31 - $90+ CDN. Does anyone have any experience with these modules?

I have only played with my SEEED Studios GPRS SIM900 shield a handful of times (ensure it was working.. sending a few texts to phones..etc).. never tried to the voice stuff (and I dont believe it has any GPS stuff)..

I personally dont see the connection between the GPRS module and the MQTT server?

I have set up a Raspberry Pi 3, and configured it as a MQTT server however... (along with installing LAMP to have Apache, local PHP support and MySQL database to log whatever I want)..

There is even a PHP class out there that does MQTT communication so you can set/update (whatever) with the MQTT server.

Is it that you want to send a text message and have something 'happen' (via MQTT server/client).. is that your goal here?

This route, it would be something like:

SMS text comes through, and is parsed..
this data is passed on to the Arduino board..
Arduino board tells MQTT server (either via ESP modules or Ethernet shield perhaps).. than an update/command/action has been received
MQTT takes data and pushes out an 'update' to all subscribe clients.

Is this what you are working towards??

I want the Arduino to connect as a mqtt client (using the pubsubclient library) to my mqtt server via the GSM module. I believe I need a GSM library (like GitHub - vshymanskyy/TinyGSM: A small Arduino library for GSM modules, that just works) that exposes a client class that I can pass to the pubsubclient initializer. That library looks to be compatible with quite a few modules so that might be the way to go.

I use in places where I have 220v current, like irrigation or drainage pumping stations, a combo of Teltonika RUT family router 3g with sim, and arduino/ethernet shield. I send water level data using cheap SR04 ultrasonic sensors or water pressure data .

Data are published in a server (refurbished i3/4gb ram/ 128 gb ssd Ubuntu LTS in a ADSL line with static IP) with mosquitto/influxdb/telegram/graphana stack.