Dortmund, though, have now dropped to third in the section with Inter Milan winning at Slavia Prague, meaning that the German side will need a favour from Barca in the final set of matches.
Dortmund almost took the lead inside the first two minutes when a fast break led to Nico Schulz finding himself free inside the Barca box after smart work from Achraf Hakimi, but the defender saw his first attempt blocked before poking the second wide of the post.
Barca had plenty of the ball in the spell that followed, although aside from a Messi free kick - which hit the Dortmund wall - the home side were struggling to create openings.
Luis Suarez thought that he had sent the home side ahead in the 22nd minute when he expertly found the bottom corner after a pass from Messi, but VAR ruled the Uruguay international's effort out for offside.
Schulz then fired straight at Marc-Andre ter Stegen down the other end after the defender again found himself free inside the Barca box after a low cross from Hakimi.
Ousmane Dembele had been handed a start for the home side ahead of Griezmann, but the two players swapped places in the 26th minute with the former picking up yet another injury problem.
Barca did take the lead in the 29th minute, though, when Luis Suarez collected a clever pass from Messi before squeezing his attempt past Roman Burki, who could not get enough contact on the ball.
Messi was then denied by the away side's goalkeeper before Griezmann had a penalty appeal turned down as the La Liga leaders looked to score a quick-fire second.
Barca were utterly dominant and doubled their lead in the 33rd minute after a mistake from Mats Hummels - who played a blind pass into Frenkie de Jong - ended with Luis Suarez feeding Messi, and the Argentine picked out the back of the net to send Ernesto Valverde's side two goals ahead.
The damage was not worsened before the end of the first half, but it was a long way back for Dortmund, who faded badly after a bright start to the clash at Camp Nou.
Jadon Sancho had been left on the bench with Dortmund boss Lucien Favre admitting before the match that the England international was not entirely "focused". The teenager was introduced at the start of the second period, though, as the Bundesliga outfit looked for a route back into the contest.
Griezmann should have put the game beyond the visitors early in the second half after being found by Messi inside the penalty box, but the France international saw his shot saved by Burki.
Messi was then booked in the 51st minute for a perceived dive inside the Dortmund box after going down very easily in a challenge with the away side's goalkeeper.
The match was drifting as it approached the hour, with Favre's side finding it extremely difficult to work the ball into Marco Reus, who was playing through the middle due to Paco Alcacer's absence through injury.
Dortmund did have a big chance to score in the 61st minute when Sancho delivered a low cross into Julian Brandt, but the attacker saw his low effort kept out by Ter Stegen.
Messi then headed a Sergi Roberto cross wide of the post down the other end with Barca's two-goal lead still standing approaching the final 25 minutes of football.
Barca had their third in the 67th minute, however, when a quick break ended with Messi sliding a low pass into Griezmann, who slotted the ball into the bottom corner of the net.
Messi then hit the top of the crossbar with a free kick in the 75th minute as a dominant home side looked to add more goals against a Dortmund team struggling for inspiration.
The visitors did have one back in the 77th minute when Sancho picked out the top corner from distance, although a comeback in the latter stages never appeared likely.
The England international did almost score a second in the final exchanges with a rasping strike, but Ter Stegen pushed the ball onto the crossbar as it finished 3-1.
Barca will finish their group campaign away to Inter on December 10, while Dortmund will attempt to book their spot in the next round when they host Slavia Prague on the same night.
BARCELONA (4-3-3): Ter Stegen; Roberto, Umtiti, Lenglet, Firpo; De Jong, Busquets, Rakitic (Vidal 78'); Dembele (Griezmann 26'), Suarez (Wague 91'), Messi
BORUSSIA DORTMUND (4-2-3-1): Burki; Piszczek (Zagadou 76'), Akanji, Hummels, Schulz (Sancho 46'); Witsel (Gotze 85'), Weigl; Hakimi, Brandt, Guerreiro; Reus